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

时间:2016-04-19 11:51:54

标签: opencl pyopencl

我有一个包含多个工作项的OpenCL内核。让我们假设讨论,我有一个带有x * y元素的二维工作空间,它们处理一个大小相同但sparce的输入元素数组。这些输入元素中很少产生结果,我想保留,大多数不会。我想将另一个内核排入队列,只将保留的结果作为输入。

OpenCL是否有可能将结果附加到某种列表中以将其作为输入传递给另一个内核,或者是否有更好的想法来减少解决方案空间的数量?此外:考虑到OpenCL的编程模型,这是一个很好的问题吗?

1 个答案:

答案 0 :(得分:2)

如果结果数据的数量很小(即:0-10%),我将使用local atomics和global atomics,使用全局计数器。

内核1< ---->之间的数据接口内核2

int counter                  //used by atomics to know where to write
data_type results[counter];  //used to store the results

<强> Kernel1:

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

<强> Kernel2:

  • 工作项目低于&#34;计数器&#34;做好工作,别人回来。