-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 的某些元素中,如果“if”条件,则不会放置任何内容违反……!那么我该如何做并行..?如果不是这样,如果我将值放置在 d 中的位置存储在不同的数组中,是否可以删除内核中 d 的“无值”位置..?

4

1 回答 1

1

基本上这是基于谓词的并行数组压缩。

看看 Parallel Prefix Sum (Scan) with CUDA或推力 http://docs.nvidia.com/cuda/thrust/index.html中描述的技术

于 2013-04-06T20:06:34.513 回答