2012-03-01 104 views
0

我正在使用GeForce 9800 GX2。我安裝的驅動程序和CUDA SDK我寫了簡單的程序,它看起來就像這樣:CUDA內核不啓動

__global__ void myKernel(int *d_a) 
{ 
    int tx=threadIdx.x; 
    d_a[tx]+=1; 
    cuPrintf("Hello, world from the device!\n"); 


} 
int main() 
{ 
    int *a=(int*)malloc(sizeof(int)*10); 
    int *d_a; 
    int i; 
    for(i=0;i<10;i++) 
     a[i]=i; 
    cudaPrintfInit(); 
    cudaMalloc((void**)&d_a,10*sizeof(int)); 
    cudaMemcpy(d_a,a,10*sizeof(int),cudaMemcpyHostToDevice); 
    myKernel<<<1,10>>>(d_a); 
    cudaPrintfDisplay(stdout, true); 
    cudaMemcpy(a,d_a,10*sizeof(int),cudaMemcpyDeviceToHost); 

    cudaPrintfEnd(); 
    cudaFree(d_a); 
} 

的代碼編譯正確,但內核似乎沒有被啓動...沒有消息從內核端打印。我該怎麼做才能解決這個問題?

+4

您可以從添加一些錯誤檢查開始。每個API調用都會返回一個狀態。您應該檢查其中每一個,以查看報告的錯誤以及發生的位置。 – talonmies 2012-03-01 15:57:42

+0

另外,您確實運行了SDK示例代碼,對吧? Linux還是Windows? SDK樣本是否可以編譯和工作?他們全部? – Patrick87 2012-03-01 16:30:43

+0

我試圖把API識別運行時錯誤,但它顯示出 '在30行的simple_device_call.cu中沒有檢測到支持CUDA的設備......我使用的是linux和SDL示例代碼也不起作用 – 2012-03-01 17:24:36

回答

1

鑑於在您的評論中,你說你得到了「沒有CUDA功能的設備」,這意味着你沒有支持CUDA的GPU或者你沒有安裝正確的驅動程序。鑑於你說你有兩個,我建議你嘗試重新安裝你的驅動程序來檢查。

其他一些注意事項:

  1. 你是不是想通過遠程桌面來做到這一點?這是行不通的,因爲微軟使用虛擬顯示設備來遠程顯示顯示器,Tesla GPU支持TCC,它允許RDP通過使GPU像非顯示設備一樣工作,但顯示GPU像Geforce這不可能。在控制檯運行或在控制檯登錄並使用VNC。
  2. 另請嘗試運行deviceQuery SDK代碼示例以檢查它是否正確檢測到您的GPU和驅動程序/運行時版本。
  3. 您應該檢查所有CUDA API調用錯誤。
  4. 致電cudaDeviceSynchronize()之前cudaPrintfDisplay()