2011-10-27 9 views
2

のではなく、別のGPUで実行している場合、セグメンテーションフォールトを与えるCUDAと:それは常にcpu_thread_idで作業しているは、OpenMP私はCUDAでの作業と並行スレッドのためのOpenMPを使用しています0

#pragma omp parallel 
{ 
    unsigned int cpu_thread_id = omp_get_thread_num(); 
    cudaSetDevice(cpu_thread_id); 

    if(cpu_thread_id==0) 
    { 
     // call kernel function 
    } 
} 

= 0であっても私は4つのGPUを持っています。だから、私はcpu_thread_idを別の番号1,2、および3に変更してテストします。私はセグメンテーションフォルトを持っています。このエラーで、私はなぜそれが問題であるか分かりません。

お気づきのことはありますか?事前

+1

カーネルで渡している引数がどのように割り当てられているか(特にスレッディング)に関する質問を編集できますか?また、どのCUDAバージョンでこれをやっていますか? – talonmies

+0

すべてのCUDA GPUが正しく検出されていますか? cudaGetDeviceCountを呼び出して、正しい数のGPUを返すかどうかを確認してください。 – Tudor

答えて

0

おかげで私は、スレッド間でmutexを追加し、それが動作します。なぜそれがそうなのかわかりません...

+0

Cuda APIを使用して、最後に遭遇したCudaエラーを特定して印刷することができます。 – Tudor

関連する問題