-1

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

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

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

4

1 回答 1

0

恐怕没有简单的解决方案可以解决您的问题。

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

您还可以将此原子操作用作数组的索引。这样,您就可以在数组中没有任何“洞”的情况下写入输出。但是,恐怕由于滥用原子操作,您可能会失去一些速度。

于 2013-08-27T08:45:06.180 回答