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

粒度

インテル® Cilk™ Plus は古い機能 (非推奨) です。代わりに、OpenMP* またはインテル® TBB を使用してください。詳細は、「インテル® Cilk™ Plus の代わりに OpenMP* またはインテル® TBB を使用するためのアプリケーションの移行」を参照してください。

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

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