インテル® C++ コンパイラー 16.0 ユーザー・リファレンス・ガイド

繰り返しオフロードの最適化

このトピックは、インテル® グラフィックス・テクノロジーをターゲットとする IA-32 およびインテル® 64 アーキテクチャーにのみ適用されます。

並列コードを繰り返し実行するには、アルゴリズムが必要です。次の例の最外 for ループについて考えてみます。

for (int k = 0; k < numNodes; k++) {
   #pragma offload target(gfx) …
   _Cilk_for (unsigned int y = 0; y < numNodes; ++y) {
      …
   }
}

オフロードブロックは numNodes 回実行され、k ループの各反復の結果に依存する CPU 側の実行はありません。コンパイラーとランタイムは、ループ不変のオフロードロジックをループ (ここでは k ループ) から取り出し、個々のオフロードタスクの完了を待たずに複数のオフロードタスクをキューに追加することで、このようなパターンをさらに最適化できます。これにより、速度が大幅に向上します。ただし、次の条件を満たしていなければなりません。