CUDA atomicAdd_block не определен

Согласно Руководству по программированию CUDA , «атомарные функции являются атомарными только по отношению к другим операциям, выполняемым потоками определенного набора ... атомарность всего блока: атомарность для всех потоков CUDA в текущей программе, выполняемых в том же блоке потока, что и текущая. поток. Они имеют суффикс _block, например "

Однако я не могу использовать atomicAdd_block в то время как мой код отлично скомпилирован с atomicAdd. Есть ли какой-нибудь заголовок или библиотека, которую я должен добавить или связать?

2 ответа

Решение

atomicAdd()давно поддерживается более ранними версиями CUDA и более старыми микроархитектурами. Тем не мение, atomicAdd_system() а также atomicAdd_blockбыли представлены IIANM с микроархитектурой Pascal в 2016 году. Минимальная вычислительная мощность, при которой они поддерживаются, составляет 6.0 . Если вы ориентируетесь на CC 5.2 или более раннюю версию или если вашей версии CUDA несколько лет, они могут быть вам недоступны.

На самом деле это действительно так, поскольку даже для текущей версии CUDA nvcc по умолчанию будет использовать Compute Capability 5.2, если другое значение не указано с -gencode или -arch (например, если вы запустите nvcc -o out my_file.cu).

Как сказал Роберт, решение состоит в том, чтобы добавить -arch=sm_70 в компиляции или для тех, кто использует CMake - добавить set(CMAKE_CUDA_ARCHITECTURES 70) в их CMakeLists.txt

Другие вопросы по тегам