У меня очень простая программа 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)
Любая помощь высоко ценится.