Совместимость версии CUDA 3.0 с опцией компилятора -arch = sm_12 - PullRequest
1 голос
/ 27 марта 2012

У меня очень простая программа CUDA. Программа, скомпилированная с параметром -arch = sm_11, работает правильно, как и ожидалось. Однако при компиляции с -arch = sm_12 результаты будут неожиданными. Вот код ядра:

__global__ void dev_test(int *test) {
*test = 100;
}

Я вызываю код ядра, как показано ниже:

    int *dev_int, val;
val = 0;
cudaMalloc((void **)&dev_int, sizeof(int));
cudaMemset((void *)dev_int, 0, sizeof(int));
cudaMemcpy(dev_int, &val, sizeof(int), cudaMemcpyHostToDevice);
dev_test <<< 1, 1>>> (dev_int);
int *host_int = (int*)malloc(sizeof(int));
cudaMemcpy(host_int, dev_int, sizeof(int), cudaMemcpyDeviceToHost);
printf("copied back from device %d\n",*host_int);

При компиляции с -arch = sm_11 оператор print правильно печатает 100. Однако при компиляции с -arch = sm_12 он печатает 0, т.е. изменения внутри функции ядра не вступают в силу. Я предполагаю, что это связано с некоторой несовместимостью между моей версией CUDA и драйверами nvidia.

CUDA версия - 3.0 Версия NVRM: Модуль ядра NVIDIA UNIX x86_64 195.36.24 Чт 22 апреля 19:10:14 PDT 2010 Версия GCC: версия 4.4.3 gcc (Ubuntu 4.4.3-4ubuntu5)

Любая помощь высоко ценится.

1 Ответ

1 голос
/ 30 марта 2012

Моя проблема, наконец, была решена. Не уверен, какая из них действительно решила - я обновил до Cuda 4.1 и обновил драйвер nVidia, и комбинация этих двух проблем решила.

...