【问题标题】:CUDA: Synchronize global memory writing & reading with compute capability 1.1CUDA:将全局内存写入和读取与计算能力同步 1.1
【发布时间】:2013-02-22 19:13:16
【问题描述】:

嗯,在 nVidia 论坛 (https://devtalk.nvidia.com/default/topic/458062/atomicadd-float-float-atomicmul-float-float-/) 上找到了解决方案。

谢谢。

【问题讨论】:

  • 由于您拥有 Compute 1.1 GPU,您可以使用原子操作将同时写入到同一内存位置的序列化。
  • CUDA 编程指南 3.1 - B.11.1.1:atomicAdd() 的浮点版本仅支持计算能力为 2.0 的设备。
  • @eg141840 sgar91 没有说你应该使用 atomicAdd,他说原子操作(hint 任何原子操作都可以基于 atomicCAS() hint i>)

标签: c++ c cuda gpgpu


【解决方案1】:

使用Atomic Functions可以实现序列化。

Compute Capability 1.1 不支持浮点数的 atomicAdd(),但可以基于 atomicCAS()(比较和交换)实现任何原子操作。

【讨论】:

    【解决方案2】:

    首先,这段代码是一堆重复的乱码,会让调试非常痛苦。找出哪些子表达式是多余的,并将它们分成不同的变量,这样你的代码就变得更清晰了。否则,寻求有关此代码的帮助与寻求帮助赢得彩票一样有意义。没有人会费心阅读你的代码,因为它很碍眼。

    让单线程解决方案运行。使用分析器来确定此代码的哪些部分最适合并行化,否则您的优化只是猜测,您无法用可衡量的术语进行计算。我猜想,一旦您运行了单线程解决方案,您可能会通过在每个内核上以独立的值范围并行运行相同的解决方案获得相当好的性能,因此几乎不需要同步。

    【讨论】:

      猜你喜欢
      • 2012-01-04
      • 1970-01-01
      • 2013-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-09
      • 2015-05-10
      相关资源
      最近更新 更多