2016-09-30 17 views
0

我在使用GTX 1080上的Cuda 8運行我的代碼時遇到了不一致的行爲。 如果我嘗試在GTX 1080(Ubuntu 16.04,Cuda 8)上運行此代碼不一致的行爲:GTX 1080上的CUDA 8

__global__ 
void setValue(int *ptr, int index, int val) 
{ 
     ptr[index] = val; 
} 

void foo(int size) 
{ 
     int *data; 
     CudaSafeCall(cudaMallocManaged(&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 %u\n",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 

我真的無法解釋這種行爲。我正在檢查CudaErrors,但即使在錯誤的代碼中,一切都可以。 有關我如何調試此行爲的任何提示? [編輯我以錯誤的方式顯示代碼的輸出]

+0

你甚至確定任何CUDA代碼在Pascal機器上都能正確運行嗎? – talonmies

回答

1

經過兩天的故障排除,我得到了一個答案。 這個問題是由NVIDIA安裝程序安裝的驅動程序引起的(無論是運行文件或可從CUDA下載部分.deb文件) 我的操作系統是Ubuntu的16.04 64

通過使用可用的驅動器在https://launchpad.net/~graphics-drivers/+archive/ubuntu/ppa我得到了正確的行爲。