我正在尝试编译在RHEL 5.6上使用CUDA 3.2编写的代码。相关部分是
extern "C"{
#include <stdio.h>
#include <inttypes.h>
static uint64_t size = 0;
...
size = 5000 * 1024 * 1024;
printf("sizeof(size) = %d size = %lu\n", sizeof(size), size);
}
代码位于.cu文件中,并使用nvcc编译。我收到编译警告,对于“size = 5000 * 1024 * 1024”行,“整数运算结果超出范围”。我得到的输出是
sizeof(size) = 8 size = 947912704
我不明白为什么变量“size”不能代表值5242880000,如果它是8字节大。
谢谢。
答案 0 :(得分:1)
正如@Damien评论的那样,乘法正在 int 上完成。下一个代码给出了预期的结果:
size = 5000L * 1024 * 1024;
这与CUDA或在“非CUDA”阶段调用通用C编译器的nvcc编译器无关。有关更多详细信息,请参阅 CUDA编译器驱动程序NVCC 文档。