我们正在使用CUDAfy.NET在GPU上进行比较。为此,我们传递了两个数组,其中一个包含数据,另一个存储结果。我只想将满足特定条件的那些元素存储在结果数组中。但是,数组最终会出现条件不满足的不需要的条目。如何从结果数组中过滤掉这些不需要的条目,然后将过滤后的数组返回给主函数?
[Cudafy]
public static void Comparisons(GThread thread, int[] a,int[] c, int iter)
{
int tx = thread.threadIdx.x;
if(tx < iter)
{
if(a[tx] < tolerance) //tolerance is some user defined number
{
c[tx] = a[tx];
}
}
}
您将必须在多个内核通道中执行此操作。
例如:
a = [1,2,1,2,1,2]
公差= 2
第一遍:
创建一个数组,其中包含1表示“保留元素”或0表示“丢弃元素”
p = [1,0,1,0,1,0]
第二遍:
在p数组上执行并行前缀总和。
i = [0,1,1,2,2,3]
(有关此主题的白皮书很多)
第三遍:
使用a,p和i。
每个元素一个线程。
如果p [threadIdx.x]等于1,则将a [threadIdx.x]放在c [i [threadIdx.x]]中
(您可以在此处使用共享内存来更好地合并对c数组的写入)
结果数组c将包含[1,1,1]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句