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

概要: 共有仮想メモリー (SVM)

共有仮想メモリー (SVM) は、CPU とプロセッサー・グラフィックス間で仮想アドレス空間を共有するプログラミング・モデルです。SVM を使用することで、プロセッサー・グラフィックスを利用して、さまざまなアルゴリズムを簡単に実行できます。

コンパイラーは細粒度のバッファー SVM をサポートします: プロセッサー・グラフィックスで処理されるポインターを割り当て/解放する必要があります。_GFX_svm_alloc はメモリーにバッファーを割り当て、_GFX_svm_free_GFX_svm_alloc によって割り当てられたバッファーを解放します。どちらの API も gfx_rt.h で宣言されています。SVM 向けのコンパイル時に、GFX オフロードコードで SVM メモリー以外を使用すると、結果が不正になったり、プログラムがハングアップする可能性があります。

SVM を有効にするには、Qoffload-svm (Windows*) または qoffload-svm (Linux*) コンパイラー・オプションを使用します。

混在メモリーモードは許可されません: すべてのプログラムユニットを SVM が有効または無効な状態でコンパイルする必要があります。すべてのプログラムユニットで一貫したメモリーモードが使用されるように、プログラマーの責任において管理してください。

この例は、次の処理を示します。

    ...
int** out = (int**)_GFX_svm_alloc(sizeof(int*) * N);
int* in = (int*)_GFX_svm_alloc(sizeof(int) * N);
    ...
__pragma(offload target(gfx))
    _Cilk_for(int i = 0; i < N; i++) {
        out[i] = &in[i];
    }
    ...
_GFX_svm_free(in);
_GFX_svm_free(out);

インテル® Cilk™ Plus は、インテル® C++ コンパイラー 18.0 では非推奨の古い機能です。プロセッサー・グラフィックスへオフロードする代替手段は、将来のリリースで提供される予定です。詳細は、「インテル® Cilk™ Plus の代わりに OpenMP* またはインテル® TBB を使用するためのアプリケーションの移行」を参照してください。