CUDA atomicAdd_block 未定义

CUDA atomicAdd_block is undefined

According to CUDA Programming Guide, "原子函数仅相对于特定集合的线程执行的其他操作是原子的... Block-wide 原子:对于当前程序中执行的所有 CUDA 线程都是原子的与当前线程相同的线程块。它们以 _block 为后缀,例如 atomicAdd_block"

但是,我不能使用 atomicAdd_block,而我的代码可以用 atomicAdd 编译。有没有我应该添加或 link 的 header 或库?

atomicAdd() 长期以来一直得到支持 - 早期版本的 CUDA 和较旧的微体系结构。然而,atomicAdd_system()atomicAdd_block 于 2016 年引入,IIANM,采用 Pascal 微架构。支持它们的最小计算能力 is 6.0。如果您的目标是 CC 5.2 或更早版本 - 或者如果您的 CUDA 版本已有数年历史 - 那么您可能无法使用它们。

这实际上很可能是这种情况,因为即使对于当前版本的 CUDA,如果没有使用 -gencode-arch 指定其他值(例如如果你 运行 nvcc -o out my_file.cu).

正如罗伯特所说,解决方案是在编译中添加 -arch=sm_70 或者对于那些使用 CMake 的人来说是将 set(CMAKE_CUDA_ARCHITECTURES 70) 添加到他们的 CMakeLists.txt