C++ AMPを用いたGPUプログラミングwiki
首都大学東京 田川研究室
C++ AMP 目次へ

GPUのメモリ(array_view)

 concurrency::array"クラスは指定されたアクセラレータ上のメモリーに領域を確保します。基本的に対象のアクセラレータ上からしかアクセスできません。
データ通信をするためには"concurrency::array_view"クラスを用います。
    accelerator Acs;//選ばれたacceleratorオブジェクトが入っているとします。

    array<int , 1> vAGpu(100 , Acs.get_default_view() );
    array_view<int , 1> vAGpuv = vAGpu;

    vAGpu[0] = 0;
    vAGpu[10] = -1;
    vAGpu[12] = 2;
    vAGpu[99] = 1;
    //数値にこれと言った意味はありません。
    //書き込みだけでなく読み込みもできます。

    

CPU側で変更したデータは、GPU側に変更だけが通知されます。GPU側でそのデータが必要になる場合は自動的に同期されます。
この同期のタイミングを明確に意識しましょう。
array_viewのデストラクタが呼び出されると自動で同期されます。気を付けてください。