opencl-并行减少没有本地内存

时间:2015-09-04 08:11:47

标签: opencl reduction prefix-sum

大多数并行缩减算法都使用共享(本地)内存。

Nvidia,AMD,英特尔等。

但是,如果设备没有共享(本地)内存。

我该怎么做?

如果我使用相同的算法但是将临时值存储在全局内存中,它会正常工作吗?

2 个答案:

答案 0 :(得分:3)

如果设备支持OpenCL 2.0,则可以使用work_group_reduce

  

gentype work_group_reduce< op> (gentype x)

     

< work_group_reduce_< 中的操作> op> work_group_scan_exclusive_< op> work_group_scan_inclusive_< op> 定义运算符,可以添加 min max

答案 1 :(得分:1)

如果我考虑一下,我的评论已经是完整的答案。

是的,您可以使用全局内存替换本地内存,但是:

  • 你必须为所有工作组分配足够的全局内存,并为工作组分配他们的内存块(因为对于本地内存,你只需要指定一个工作组所需的内存,每个工作组将分配数量指定的内存)
  • 你必须使用CLK_GLOBAL_MEM_FENCE而不是CLK_LOCAL_MEM_FENCE
  • 你将失去一个重要的表现

如果我今晚有时间,我会发一个简单的例子。