インテル® 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 ループ) から取り出し、個々のオフロードタスクの完了を待たずに複数のオフロードタスクをキューに追加することで、このようなパターンをさらに最適化できます。これにより、速度が大幅に向上します。ただし、次の条件を満たしていなければなりません。
手動または自動で、#pragma offload ブロックをループ内にインライン展開します。
ループ・インデックスのインクリメントを除いて、ループにはホスト側の処理を含めてはなりません。