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

OS スレッドとの相互作用

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

OS スレッドを使用する場合、次の点に注意する必要があります。

ワーカースレッドは OS スレッドである

ランタイムシステムは、ネイティブ OS の機能を使用してワーカースレッドのセットを割り当てます。

インテル® Cilk™ Plus プログラムは常に利用可能なすべてのプロセッサーを 100% 使用するわけではない

インテル® Cilk™ Plus プログラムを実行すると、並列処理がない場合でも、プログラムがシステムのすべてのプロセッサーのリソースを消費しているかのように見えることがあります。特に、Windows* タスク・マネージャーの [パフォーマンス] タブで、1 つのストランドのみ実行している場合に、すべての CPU がビジー状態になることがあります。

実際には、ランタイム・スケジューラーは、CPU をほかのプログラムに譲ります。ただし、プロセッサーを必要としているプログラムがない場合は、スチールする作業を探すために直ちにワーカーが実行され、これにより CPU がビジー状態になります。そのため、プログラムが常にすべてのプロセッサーを使用しているように見えますが、システムやほかのプログラムの妨げとなることはありません。

ネイティブ・スレッド・インターフェイスを使用する場合には注意が必要である

インテル® Cilk™ Plus のストランドは OS スレッドではありません。実行中に、ストランドがワーカー間を移動することはありません。ただし、cilk_spawncilk_sync、または cilk_for は 1 つまたは複数のストランドを終了し、1 つまたは複数の新しいストランドを作成するため、これらの文の後にワーカーが変わることがあります。また、特定のストランドを実行するワーカーを制御する方法もありません。

これは、プログラムにいくつかの影響を与えますが、次の点が最も重要です。