複数のOpenMPスレッドから複数のCUDAデバイスを使用しようとしています。デバイスはメインスレッドから初期化され(つまり、メモリが割り当てられ)、次にcudaSetDevice
別のスレッドから使用して、別のデバイスでカーネルを起動します。スレッドはデバイスを共有していません。各スレッドはそのデバイスに排他的にアクセスできます。
私が理解していることから、これはうまくいくはずです。ただし、メインではないOpenMPスレッド(つまり、omp_get_thread_num()!= 0)からデバイスでカーネルを起動するとすぐに、CUDAから「無効なデバイスの序数エラー」が発生します。
kernel<<<...>>>(...);
error = cudaDeviceSynchronize(); // returns cudaSuccess
error = cudaGetLastError(); // returns invalid device ordinal error
私は何かが足りないのですか?誰かが以前にこのようなものを見たことがありますか?CUDA5.0を使用しています。