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