1

C++Amp を使用して畳み込みフィルターを並列化しようとしています。次の関数が機能するようにしたいと思います (適切に実行する方法がわかりません)。

float* pixel_color[] = new float [16]; 

concurrency::array_view<float, 2> pixels(4, 4, pixel_array), taps(4, 4, myTap4Kernel_array); 
concurrency::array_view<float, 1> pixel(16, pixel_color); // I don't know which data structure to use here

parallel_for_each(
      pixels.extent, [=](concurrency::index<2> idx) restrict(amp)
  {
      int row=idx[0];
      int col=idx[1];

      pixels(row, col) = taps(row, col) * pixels(row, col); 
      pixel[0] += pixels(row, col); 
     });
pixel_color.synchronize(); 

pixels_.at<Pixel>(j, i) = pixel_color 

}

主な問題は、ピクセル構造を適切に使用する方法がわからないことです ( 16 個の要素すべてが必要ないため、ここで使用する同時データ構造はどれですか)。この方法で値を安全に追加できるかどうかはわかりません。次のコードは機能しません。ピクセル [0] に適切な値が追加されません。私も定義したいと思います

concurrency::array_view<float, 2> pixels(4, 4, pixel_array), taps(4, 4, myTap4Kernel_array); 

メソッドの外側 (ヘッダー ファイルなど) に置き、コストラクタまたはその他の関数で初期化します (これはボトルネックであり、CPU と GPU の間でデータをコピーするのに多くの時間がかかるため)。誰もこれを行う方法を知っていますか?

4

1 に答える 1