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
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