2

N×Nの2次元配列がある場合、その4分の1ごとに平均して、次のように同じ数にします。

matrix = [ 1 2 4 6
           6 7 1 1
           9 8 3 6
           4 7 9 2 ]

そしてそれにcudaカーネルを適用した後、結果は次のようになります:

result = [ 4 4 3 3
           4 4 3 3
           7 7 5 5
           7 7 5 5 ]

これをCcudaカーネルでどのように実装できますか?

4

1 に答える 1

2

このような操作をしても特に問題はありません。すぐに頭に浮かぶアプローチは、次のようになります。

  1. 平均化する各部分行列にラベルを付ける
  2. ラベル付けされた各領域でプレフィックスの合計を実行し、結果の合計を平均に変換します
  3. ラベル付けされた各領域に、対応する平均値を入力します。

CUDAツールキットに同梱されているスラストテンプレートライブラリには、これを実装するために必要なアルゴリズムのほとんどが含まれています。必要なユーザーコードは、各サブマトリックスにラベルを付けるファンクターだけです。これは、書くのが非常に簡単なはずです。

于 2013-01-02T18:25:18.763 に答える