0

私は初めて次のマルチGPUCUDAコードを持っています:

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つのデバイスが見つかりましたが、実行中の2番目のGPUでセグメント障害が発生しました。私は4010のCUDAバージョンと2.0の計算能力を持っています。

4

1 に答える 1

1

最終的に私は問題を発見しました。私はcudaプロファイリング環境を次のように設定しました:

export COMPUTE_PROFILE=1
export COMPUTE_PROFILE_LOG=cuda_profile.log

2行目が問題の原因です。異なるGPUが同じプロファイリングログファイルに書き込んでいる場合、競合が発生する可能性があります。2行目を次のように変更します。

export COMPUTE_PROFILE_LOG=cuda_profile_%p_%d.log

問題を解決します。

于 2012-12-20T19:55:59.273 に答える