Непоследовательное поведение: CUDA 8 на GTX 1080

#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 Я получил правильное поведение.