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

GPUに計算させる(extent、ラムダ式)

    accelerator Acs;//選ばれたacceleratorオブジェクトが入っているとします。

    array<int , 1> *pvA;

    pvA = new array<int , 1>(100 , Acs.get_default_view());
    array_view<int , 1> vaC = *pvA;

    extent<1> exA;

    exA[0] = 100;//100スレッド発行予定。

    parallel_for_each(
        Acs.get_default_view() ,//計算させたいGPUを指定。
        exA  ,                  //スレッド数を指定。
        [=](index<1> iC) restrict(amp)   
        {
            //このコードは並列に動く。

            int i = iC[0]; //iC[0]にはこの場合0-99のスレッド番号が入っている。
            vaC[iC] = 0;   //indexクラスでアクセス
            vaC[i]  = 0;   //1次元配列の場合、整数値でアクセス可能
        }
    );

上記のように書けば、100スレッド並列にコードが動くとだけ覚えておいても問題はありません。
extentクラスでスレッド数を指定します。
スレッド番号はindexクラスで受け取ります。
受け取ったスレッド番号に従い、処理する場所を変更するコードを書けばよいだけです。