将 OpenCL 结果附加到列表/减少解决方案空间

Append OpenCL result to list / Reduce solution room

我有一个包含多个工作项的 OpenCL 内核。让我们假设讨论,我有一个 2-D Workspace,其中 x*y 元素在大小相同但稀疏的输入元素数组上工作。这些输入元素中很少会产生我想保留的结果,大多数不会。我想入队另一个内核,它只将保留的结果作为输入。

在 OpenCL 中是否可以将结果附加到某种列表以将它们作为输入传递给另一个内核,或者是否有更好的想法来减少解决方案的体积 space?此外:考虑到 OpenCL 的编程模型,这甚至是一个好问题吗?

如果结果数据量很小(即:0-10%),我会使用局部原子和全局原子,并使用全局计数器。

内核 1 <----> 内核 2:

之间的数据接口
int counter                  //used by atomics to know where to write
data_type results[counter];  //used to store the results

内核 1:

  • 创建一个对数据进行操作的内核函数
  • 产生结果的工作项:
    • 将结果保存到本地内存,并确保在本地计数器中使用本地原子不会发生数据竞争。
  • 使用工作项 0 使用全局原子将所有本地结果保存回全局内存。

内核2:

  • 低于 "counter" 的工作项可以工作,其他只是 return。