【发布时间】:2018-11-01 17:21:59
【问题描述】:
您好,我是 cuda 编程的新手,但遇到了问题。
我有一个变量,让我们调用 foo 存储在每个块的共享内存中,每个块具有不同的值。而且我只希望一个线程将所有这些跨块相加。我想将 foo 发送到全局内存然后计算总和,但是有没有什么函数可以更快地做到这一点?
感谢您的帮助。
【问题讨论】:
您好,我是 cuda 编程的新手,但遇到了问题。
我有一个变量,让我们调用 foo 存储在每个块的共享内存中,每个块具有不同的值。而且我只希望一个线程将所有这些跨块相加。我想将 foo 发送到全局内存然后计算总和,但是有没有什么函数可以更快地做到这一点?
感谢您的帮助。
【问题讨论】:
让每个块中的一个线程执行atomicAdd() 操作会更快,将每个块的值添加到全局内存中的单个网格范围变量中。
参见CUDA C Programming guide 的relevant section。
要更深入地探索优化缩减(= 求和),尽管不一定是您想要执行的,请查看 Mark Harris 的演示文稿:Optimizing Parallel Reduction in CUDA。
【讨论】: