Fla*_*ire 6 c++ types cuda atomic word-size
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
Run Code Online (Sandbox Code Playgroud)
因此,当我将 an 传递uint64_t给atomicAdd它时,它会抱怨,因为它没有为“ unsigned long int”定义。
是否可以uint64_t == long long int按照编程指南中所述假设进行 CUDA 编译?
回答一下以供将来参考:
有 2 个选项:使用 typedef 定义 64 位 cuda 类型,例如:
typedef long long int int64_cu
typedef unsigned long long int uint64_cu
Run Code Online (Sandbox Code Playgroud)
并且可能通过(boost-)保护它们的static_asserts大小相同
或者按照@Anastasiya Asadullayeva的建议,在调用中使用reinterpret_cast,最好也由static_assert保护。