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

将OpenCL结果附加到列表/减少解决方案室,opencl,pyopencl,Opencl,Pyopencl,我有一个带有多个工作项的OpenCL内核。让我们假设在讨论中,我有一个二维工作区,其中x*y元素在一个大小相同但稀疏的输入元素数组中工作。这些输入元素很少会产生我想要保留的结果,而大多数不会。我想让另一个内核排队,它只将保留的结果作为输入 在OpenCL中,是否可以将结果附加到某种列表中,作为输入传递给另一个内核,或者是否有更好的方法来减少解决方案空间的体积?此外:考虑到OpenCL的编程模型,这是一个很好的问题吗?如果结果数据量很小(即:0-10%),我会使用本地原子和全局原子以及全局计数器

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


在OpenCL中,是否可以将结果附加到某种列表中,作为输入传递给另一个内核,或者是否有更好的方法来减少解决方案空间的体积?此外:考虑到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:

  • 低于“计数器”的工作项执行工作,其他项仅返回