2011-10-17 82 views
0

我試圖編譯使用RHEL 5.6上的CUDA 3.2編寫的代碼。相關部分是cuda源代碼中的「整數運算結果超出範圍」

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 

我不明白,爲什麼變量「大小」不能代表值5242880000,如果是8個字節大。

謝謝。

+1

我想'5000','1024'和'1024'都被當作'int'文字處理,乘法是在'int's上完成的,然後結果被存儲在' uint64_t'。但那只是我的直覺。嘗試用'L'將後綴中的一個或多個加後綴。 –

+0

就是這樣!謝謝! – Rayne

回答

1

As @Damien評論說,乘法運算正在int上完成。下面的代碼給出了預期的結果:

size = 5000L * 1024 * 1024; 

這不是CUDA或NVCC編譯器,在「非CUDA」相調用通用的C編譯器有關。有關更多詳細信息,請參閱CUDA編譯器驅動程序NVCC doc。