cuda源代码中的“整数运算结果超出范围”

时间:2011-10-17 08:35:38

标签: gcc integer range

我正在尝试编译在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字节大。

谢谢。

1 个答案:

答案 0 :(得分:1)

正如@Damien评论的那样,乘法正在 int 上完成。下一个代码给出了预期的结果:

size = 5000L * 1024 * 1024;

这与CUDA或在“非CUDA”阶段调用通用C编译器的nvcc编译器无关。有关更多详细信息,请参阅 CUDA编译器驱动程序NVCC 文档。