我想将以下内核代码并行, 在下面的代码中,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的“无值”位置。?
答案 0 :(得分:1)
基本上这是基于谓词的并行数组压缩。看一下 描述的技术 http://http.developer.nvidia.com/GPUGems3/gpugems3_ch39.html