2012-12-19 32 views
0

我有以下多GPU CUDA代碼爲我的第一次:爲什麼多個GPU CUDA代碼失敗?

int main(void) { 
    int count; 
    cudaGetDeviceCount(&count); 
    float** gtt = new float*[count]; 
    for (int i=0; i< count; i++) { 
     cudaSetDevice(i); 
     int j; 
     cudaGetDevice(&j); 
     printf("get device %d\n",j); 
     cudaMalloc((void**)&gtt[i], 2*sizeof(float)); 
     cudaFree(gtt[i]); 
    } 
} 

我發現在同一節點上3個設備,但對第二GPU運行段故障。我有一個4010的CUDA版本,計算能力爲2.0。

+0

您應該爲每個API調用添加錯誤檢查。可能會有一些重要的信息丟失。 – talonmies

+0

@ talonmies我做了,但結束了同樣的事情。 –

+0

segfaults通常意味着您正在訪問cpu範圍之外的內存。在做cudaMalloc之前打印出ptr gtt [i]。 –

回答

1

最終我發現了這個問題。我建立了cuda分析環境:

export COMPUTE_PROFILE=1 
export COMPUTE_PROFILE_LOG=cuda_profile.log 

第二行導致問題。當不同的gpus寫入同一個分析日誌文件時,可能會有一些衝突。第二行更改爲:

export COMPUTE_PROFILE_LOG=cuda_profile_%p_%d.log 

解決了這個問題。