0

根据 CUDA Programming Guide,“原子函数仅相对于由特定集合的线程执行的其他操作是原子的......块范围的原子:对于当前程序中的所有 CUDA 线程在与当前线程块相同的线程块中执行的原子线程。这些以 _block 为后缀,例如,atomicAdd_block

但是,atomicAdd_block当我的代码使用atomicAdd. 我应该添加或链接到任何标题或库吗?

4

2 回答 2

2

atomicAdd()已经支持了很长时间 - 早期版本的 CUDA 和较旧的微架构。但是, IIANM 于 2016atomicAdd_system()atomicAdd_block推出,采用 Pascal 微架构。支持它们的最低计算能力为 6.0。如果您的目标是 CC 5.2 或更早版本 - 或者如果您的 CUDA 版本已有几年历史 - 那么您可能无法使用它们。

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

于 2021-11-02T22:36:16.660 回答
0

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

于 2021-11-02T22:42:25.450 回答