在OpenCL内核代码中删除数组中的一些元素

时间:2013-08-27 08:36:47

标签: opencl

通过执行扫描操作压缩数组(将所需元素从输入数组放入输出数组)后,在放置所需元素后,输出(压缩)数组中可能会以连续形式留下一些空白空格。有没有办法在OpenCL内核代码中释放这些空白空间而不返回主机(仅为了删除)...?

例如,我有一个包含100个元素的输入数组,其中一些no.s大于50,其中一些小于50,并且想要将no.s存储在不同的数组中,并且只对这些数据进行进一步处理那个数组中的元素,我不知道这个输出数组的大小,因为我不知道有多少no.s实际上大于50(所以我声明这个数组的大小为100)...然后执行扫描后,我得到输出数组,所有元素都超过50 ......但是在存储这些元素之后,输出数组中可能会有一些连续的空格...那么我们如何删除这些空格...是有没有办法在内核代码本身做到这一点......?或者我们是否必须返回主机代码...?

如果我们不能删除内核代码本身的剩余空间,并且如果我们不想返回主机代码,我们如何处理这些压缩数组以进行进一步处理??

1 个答案:

答案 0 :(得分:0)

我害怕你的问题没有简单的解决办法。

我认为你可能会做的是在每个数组中有一个元素的计数器。您可以首先使用atomic_inc()在本地递增计数器,然后使用atomic_add()全局递增计数器。 这样,在内核执行结束时,每个数组中的元素总数将会出现。

您也可以将此原子操作用作数组的索引。通过这种方式,您可以在没有任何"孔的情况下写入输出。在你的数组中。但是,由于滥用原子操作,你可能会失去一些速度,我担心。