【问题标题】:"Integer operation result out of range" in cuda source codecuda源代码中的“整数运算结果超出范围”
【发布时间】:2011-10-17 08:35:38
【问题描述】:

我正在尝试在 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”不能代表 8 字节大的值 5242880000。

谢谢。

【问题讨论】:

  • 我猜500010241024 中的每一个都被视为int 文字,乘法是在ints 上完成的,然后是结果存储在uint64_t 中。但这只是我的直觉。尝试使用L 为其中的一个或多个添加后缀。

标签: gcc integer range


【解决方案1】:

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

size = 5000L * 1024 * 1024;

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多