«Целочисленный результат операции вне диапазона» в исходном коде cuda - PullRequest
0 голосов
/ 17 октября 2011

Я пытаюсь скомпилировать код, написанный с использованием CUDA 3.2 на RHEL 5.6. Соответствующие части

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 Ответ

1 голос
/ 17 октября 2011

Как прокомментировал @Damien, умножение выполняется на int .Следующий код дает ожидаемый результат:

size = 5000L * 1024 * 1024;

Это не связано с CUDA или компилятором nvcc, который вызывает компилятор C общего назначения на этапах «не-CUDA».Подробнее см. Драйвер компилятора CUDA NVCC .

...