インテル® C++ コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス
このトピックは、インテル® グラフィックス・テクノロジーをターゲットとする場合にのみ適用されます。
インテル® Cilk™ Plus は、インテル® C++ コンパイラー 18.0 では非推奨の古い機能です。プロセッサー・グラフィックスへオフロードする代替手段は、将来のリリースで提供される予定です。詳細は、「インテル® Cilk™ Plus の代わりに OpenMP* またはインテル® TBB を使用するためのアプリケーションの移行」を参照してください。
コンパイラーは、プロセッサー・グラフィックスを利用する 2 つのヘテロジニアス・オフロード・プログラミング・モデルを提供します。
同期オフロード:
CPU は、オフロードタスクの完了を待機してから実行を継続します。
このモデルは、#pragma offload 以下の並列ループを並列 _Cilk_for ループにするか、または #pragma omp target の後に #pragma omp parallel for を指定することで利用できます。
コンパイラーは、OpenMP* 構文またはインテル® Cilk™ Plus 構文で指定された、並列ループを含むオフロード領域に基づいてデータ共有とカーネルの作成を行います。
非同期オフロード:
CPU は、カーネルの完了を待つように要求されるまで実行を継続します。
このモデルは、次のいずれかの方法で利用できます。
このセクションで説明する API。
インテル® Cilk™ Plus 構文: #pragma offload_waitwait と一緒に #pragma offloadsignal または wait を使用します。
OpenMP* 構文: #pragma omp taskwaitdepend と一緒に #pragma omp targetnowait を使用します。詳細は、「OpenMP* プラグマの概要」を参照してください。
データ共有とカーネルのエンキューをより細かく制御できます。データ共有とカーネルのエンキューは個別の処理なので、複数のカーネルでデータを共有できます。
インテル® グラフィックス・テクノロジー・ランタイムと gfx_rt.h ヘッダーファイルは、キューに追加されたユーザー定義のカーネル関数のオフロード、および CPU とプロセッサー・グラフィックス間のデータ共有をわずかなプログラミングの変更で制御できる非同期 API を提供します。この API は、カーネル・エントリー・ポイントの並列ループとして _Cilk_for を用いて記述された名前付きカーネルやダイレクトカーネルとともに使用できます。
この API には次の関数が含まれます。
名前 |
説明 |
---|---|
GfxTaskId _GFX_offload |
インオーダーのオフロードキューにタスクを追加します。 |
_GFX_wait |
タスクの完了を待ちます。 |
_GFX_share _GFX_unshare |
共有リニアデータを管理します。 |
GfxImage2D (C++ インターフェイス、クラス・コンストラクター) GfxSharedImage2D (C++ インターフェイス、クラス・コンストラクター) GfxResourceHandle _GFX_create_image_2d (C インターフェイス) _GFX_close_resource_handle (C インターフェイス) |
プロセッサー・グラフィックス操作の 2D イメージを作成/破棄します。 |
GfxImage2D::write (C++ インターフェイス) GfxSharedImage2D::write (C++ インターフェイス) GfxImage2::read (C++ インターフェイス) GfxSharedImage2::read (C++ インターフェイス) _GFX_read_image_2d (C インターフェイス) _GFX_write_image_2d (C インターフェイス) |
CPU と GPU 間で 2D イメージのコンテンツを同期します。 |