1

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

英伟达、AMD、英特尔等。

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

我该怎么做?

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

4

2 回答 2

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> 中的 <op>定义了运算符,可以是addminmax

于 2015-09-04T09:45:38.730 回答
1

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

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

  • 您必须为所有工作组分配足够的全局内存并为工作组分配它们的内存块(由于使用本地内存,您只需指定单个工作组所需的内存量,每个工作组将分配指定的内存量)
  • 你必须使用 CLK_GLOBAL_MEM_FENCE 而不是 CLK_LOCAL_MEM_FENCE
  • 您将损失大量性能

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

于 2015-09-04T09:00:12.960 回答