【问题标题】:opencl- parallel reduction without local memoryopencl - 没有本地内存的并行减少
【发布时间】:2015-11-30 07:49:29
【问题描述】:

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

英伟达、AMD、英特尔等。

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

我该怎么做?

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

【问题讨论】:

  • 是的,使用全局内存应该可以正常工作,但是: * 你必须为所有工作组分配足够的全局内存,并为工作组分配它们的内存块 * 你必须使用 CLK_GLOBAL_MEM_FENCE 而不是 CLK_LOCAL_MEM_FENCE * 您将损失大量性能

标签: opencl reduction prefix-sum


【解决方案1】:

如果我仔细想想,我的评论已经是完整的答案了。

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

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

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

【讨论】:

    【解决方案2】:

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

    gentype work_group_reduce (gentype x)

    work_group_reduce_work_group_scan_exclusive_work_group_scan_inclusive_中的定义运算符,可以是addminmax

    【讨论】:

      猜你喜欢
      • 2015-04-17
      • 2017-03-27
      • 2013-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-18
      相关资源
      最近更新 更多