Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 64位原子插件CUDA_C++_Types_Cuda_Atomic_Word Size - Fatal编程技术网

C++ 64位原子插件CUDA

C++ 64位原子插件CUDA,c++,types,cuda,atomic,word-size,C++,Types,Cuda,Atomic,Word Size,我在CUDA 7下使用原子添加时遇到问题atomicAdd是为“int”、“unsigned int”和“unsigned long long int”定义的,表示它使用了“32位或64位值” 在我们的代码中,为了安全起见,我们使用了uint32\u t和uint64\u t。但是,gcc以以下方式对其进行了定义: #if __WORDSIZE == 64 typedef unsigned long int uint64_t; #else __extension__ typedef unsi

我在CUDA 7下使用原子添加时遇到问题
atomicAdd
是为“
int
”、“
unsigned int
”和“
unsigned long long int
”定义的,表示它使用了“32位或64位值”

在我们的代码中,为了安全起见,我们使用了
uint32\u t
uint64\u t
。但是,gcc以以下方式对其进行了定义:

#if __WORDSIZE == 64
typedef unsigned long int   uint64_t;
#else
__extension__
typedef unsigned long long int  uint64_t;
#endif
因此,当我将一个
uint64\u t
传递给
atomicAdd
时,它会抱怨,因为它没有为“
无符号长int
”定义


按照编程指南中的说明,假设CUDA编译的
uint64\u t==long-long-int
可以保存吗?

回答这个问题以供将来参考:

有两个选项:使用typedef定义64位cuda类型,如:

typedef long long int int64_cu
typedef unsigned long long int uint64_cu
并可能通过(boost-
静态断言
大小相同来保护这些


或者按照@Anastasiya Asadullayeva的建议,在调用中使用一个reinterpret_cast,它最好也由一个静态断言来保护。

是的,我可以。然而,我们似乎在前面遇到了这个问题,并为设备端使用定义了(u)int64_cu。用静态断言来保护这一点可能是最好的解决方案。