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

array_viewのarrayの入れ替え

array_viewが参照しているarrayを途中で入れ替えたくもなるでしょう。その手段と注意点を述べます。
    accelerator Acs;//選ばれたacceleratorオブジェクトが入っているとします。

    array<int , 1> *pvA;
    array<int , 1> *pvB;

    pvA = new array<int , 1>(100 , Acs.get_default_view());
    pvB = new array<int , 1>(100 , Acs.get_default_view());
    
    array_view<int , 1> vaA;//無理。エラーとなる。

    array_view<int , 1> vaC = *pvA;//ok。

    vaC = *pvB;//ok。
    vaC = *pvA;//ok。

array_viewは必ず、何かしらのarrayオブジェクト等で初期化する必要があります。初期化した後は好きに入れ替えることができます。なんでもよいので適当に初期化してください。
なお、入れ替えるたびに同期が発生することはありません。書き換えたデータがGPUで必要になった時、pvB、pvAの両方が同期されます。