我正在尝试使用来自多个 OpenMP 线程的多个 CUDA 设备。设备从主线程初始化(即在它们上分配内存),然后我cudaSetDevice
从不同的线程使用,然后在不同的设备上启动内核。线程不是共享设备,每个线程都可以独占访问其设备。
据我了解,这应该可以正常工作。但是,一旦我从不是主要的 OpenMP 线程(即 omp_get_thread_num() != 0)在设备上启动内核,我就会从 CUDA 收到“无效的设备序号错误”:
kernel<<<...>>>(...);
error = cudaDeviceSynchronize(); // returns cudaSuccess
error = cudaGetLastError(); // returns invalid device ordinal error
我错过了什么吗?有没有人见过这样的东西?我正在使用 CUDA 5.0。