-2

次のカーネル コードを並列にしたいと考えました。以下のコードでは、a のサイズは n、b および c は 8*n であり、d のサイズは n より小さい値です (例: 3*n/4)。

j=0;
for(i=0;i<n;i++)
 {
  if (a[b[i]]!=a[c[i]])
  {
   d[j]=b[i];
   j++;
  }
 }

a と d の要素の数が同じではないため、i=get_global_id(0) を与えるという問題に直面しています。犯す…!では、どうすれば平行にできますか..?そうでない場合、値が d に配置されている位置を別の配列に格納すると、カーネル内の d の「値のない」位置を削除できますか..?

4

1 に答える 1

1

基本的に、これは述語に基づく並列配列圧縮です。

Parallel Prefix Sum (Scan) with CUDAまたは Thrust http://docs.nvidia.com/cuda/thrust/index.htmlで説明されている手法をご覧ください。

于 2013-04-06T20:06:34.513 に答える