c++ - 什么在 CUDA : global memory write + __threadfence() or atomicExch() to global memory? 中更快

标签 c++ cuda atomic coalescing

假设我们有很多线程将按顺序访问全局内存,哪个选项总体上执行得更快?我有疑问,因为 __threadfence() 考虑了所有共享和全局内存写入,但写入是合并的。另一方面,atomicExch() 只考虑重要的内存地址,但我不知道写入是否合并。

在代码中:

array[threadIdx.x] = value;

或者

atomicExch(&array[threadIdx.x] , value);

谢谢。

最佳答案

在开普勒 GPU 上,我会打赌 atomicExch 因为原子在开普勒上非常快。在 Fermi 上,这可能是一次清洗,但如果没有碰撞,atomicExch 仍然可以表现良好。

请做一个实验并报告结果。

关于c++ - 什么在 CUDA : global memory write + __threadfence() or atomicExch() to global memory? 中更快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11586164/

相关文章:

multithreading - 什么是新手的原子操作?

c++ - 为什么在 std::atomic 中使用 volatile 限定符?

c++ - 读取文件并将其存储在 C++ 中的 protected 变量中

c++ - 简单的 CUDA 应用程序,cudaMalloc 以错误 : unspecified driver error 结束

javascript - 使用 v8 读取二进制文件的函数

cuda - 具有相同签名的函数

c++ - 在执行 CUDA 设备代码时在同一线程中运行主机代码

transactions - 多个无事务外部系统上的原子操作

C++ [UDP] 如何跟踪服务器上所有已连接(客户端)的套接字连接?

c++ - 求毕达哥拉斯三元组,总和为1000,没有错误但没有运行