#cuda #nvidia
#cuda #nvidia
Вопрос:
Я испытываю непоследовательное поведение при запуске моего кода с использованием Cuda 8 на GTX 1080. Если я попытаюсь запустить этот код на моем GTX 1080 (Ubuntu 16.04, Cuda 8)
__global__
void setValue(int *ptr, int index, int val)
{
ptr[index] = val;
}
void foo(int size)
{
int *data;
CudaSafeCall(cudaMallocManaged(amp;data, size*sizeof(int)));
memset(data, 0, size*sizeof(int));
setValue<<<1,1>>>(data, size/2, 5);
CudaCheckError();
CudaSafeCall(cudaDeviceSynchronize());
//useData(data);
for(int i=0;i<size;i )
printf("%u %un",i,data[i]);
CudaSafeCall(cudaFree(data));
}
int main()
{
foo(5);
}
Я получаю следующий вывод
0 0
1 0
2 0
3 0
4 0
хотя, если я запускаю его на компьютере с GeForce GT 740 и Cuda 7, я получаю
0 0
1 0
2 5
3 0
4 0
Я действительно не могу объяснить это поведение. Я проверяю ошибки cuda, но все в порядке даже с ошибочным кодом.
Любой намек на то, как я могу отладить это поведение?
[РЕДАКТИРОВАТЬ Я неправильно показывал вывод кода]
Комментарии:
1. Вы вообще уверены, что любой код CUDA корректно выполняется на компьютере Pascal?
Ответ №1:
После двух дней устранения неполадок я получил ответ на этот вопрос. Проблема была вызвана драйвером, установленным установщиком nvidia (как файлом запуска, так и .deb доступен в разделах загрузки CUDA) Моя ОС — Ubuntu 16.04 x64
С помощью драйвера, доступного по адресу https://launchpad.net /~graphics-drivers/ archive/ubuntu/ppa Я получил правильное поведение.