好吧,在 nVidia 论坛上找到了解决方案(https://devtalk.nvidia.com/default/topic/458062/atomicadd-float-float-atomicmul-float-float-/)。
谢谢。
好吧,在 nVidia 论坛上找到了解决方案(https://devtalk.nvidia.com/default/topic/458062/atomicadd-float-float-atomicmul-float-float-/)。
谢谢。
首先,这段代码是一堆重复的乱码,会让调试非常痛苦。找出哪些子表达式是多余的,并将它们分成不同的变量,这样你的代码就变得更清晰了。否则,寻求有关此代码的帮助与寻求帮助赢得彩票一样有意义。没有人会费心阅读您的代码,因为它很碍眼。
运行单线程解决方案。使用分析器来确定此代码的哪些部分最适合并行化,否则您的优化只是猜测,您无法用可衡量的术语表示。我猜想,一旦您运行了单线程解决方案,您可能会通过在每个内核上以独立的值范围并行运行相同的解决方案来获得相当好的性能,因此几乎不需要同步。
序列化可以通过使用Atomic Functions来实现。
Compute Capability 1.1 不支持浮点数的 atomicAdd(),但可以基于 atomicCAS()(比较和交换)实现任何原子操作。