64-битный атомныйДобавить в CUDA
У меня проблема с использованием atomicAdd
под CUDA 7. atomicAdd
определяется для "int
","unsigned int
" а также "unsigned long long int
"заявив, что он использует" 32 или 64-битное значение ".
В нашем коде мы используем uint32_t
а также uint64_t
для безопасности. Однако gcc определяет это следующим образом:
#if __WORDSIZE == 64
typedef unsigned long int uint64_t;
#else
__extension__
typedef unsigned long long int uint64_t;
#endif
Поэтому, когда я передаю uint64_t
в atomicAdd
это жалуется, потому что это не определено для "unsigned long int
".
Можно ли предположить uint64_t == long long int
для компиляции CUDA, как указано в руководстве по программированию?
1 ответ
Чтобы ответить на это для дальнейшего использования:
Есть 2 варианта: либо использовать typedef для определения 64-битных типов cuda, таких как:
typedef long long int int64_cu
typedef unsigned long long int uint64_cu
И, вероятно, охранять их (Boost-)static_asserts
быть одинакового размера
Или, как предлагает @Anastasiya Asadullayeva, использовать reinterpret_cast в вызове, который также лучше защищен static_assert.