如何使以下顺序代码并行?

时间:2013-04-03 03:38:00

标签: opencl

我想将以下内核代码并行,   在下面的代码中,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的“无值”位置。?

1 个答案:

答案 0 :(得分:1)

基本上这是基于谓词的并行数组压缩。看一下 描述的技术 http://http.developer.nvidia.com/GPUGems3/gpugems3_ch39.html

或推力 http://docs.nvidia.com/cuda/thrust/index.html