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.

1

Другие решения


По вопросам рекламы [email protected]