インテル® C++ コンパイラー 17.0 デベロッパー・ガイドおよびリファレンス

粒度

分割統治は、問題を大小の問題にバランスよく分割する効率的な並列化手法です。 ワーク・スチール・スケジューラーは、チャンクサイズが大きすぎたり、小さすぎたりしなければ、チャンクをコアに効率的に割り当てます。 チャンクサイズが大きすぎると、すべてのコアを利用するのに十分な並列化が得られないことがあります。 逆に、チャンクサイズが小さすぎると、スケジュールのオーバーヘッドにより並列化のメリットを得ることができません。

cilk_for または cilk_spawn を使用する並列プログラムでは、粒度に注意する必要があります。cilk_for を使用する場合、ループのチャンクサイズを設定することで粒度を制御できます。 また、入れ子構造のループでは、cilk_for を使用して内側または外側のループ、あるいはその両方で最良のパフォーマンスを得られるかどうかは、計算内容によります。 cilk_spawn を使用する場合、非常に小さなチャンクはスポーンしないようにしてください。 cilk_spawn のオーバーヘッドは比較的小さいものの、非常に小さなチャンクをスポーンした場合、パフォーマンスが低下します。