3

有谁知道以下用法cudaSetDevice是否正确?我想随时在任何主机线程中重复调用在不同设备上创建的资源;有没有办法在 CUDA 中做到这一点?

 cudaSetDevice(0);
 /...create cuda streams and do some memory allocation on gpu.../
 cudaSetDevice(1);
 /...create cuda streams and do some memory allocation on gpu.../
 #pragma omp parallel num_threads(2)
 { 
   int omp_threadID=omp_get_thread_num();
    ....
   if (omp_threadID==0)
   {
    cudaSetDevice(0);
    /...calling streams/memory created on device 0.../
   }
   else
   {
    cudaSetDevice(1);
    /...calling streams/memory created on device 1.../
    }; 
  };
4

1 回答 1

1

是的,这样的事情应该有效。确保您在设备 0 上创建的所有内容仅在 OpenMP 线程 0 中使用,对于设备 1 和线程 1 也是如此。

您可能还想查看CUDA OpenMP 示例代码,它演示了如何使用 OpenMP 线程来管理单个设备。

于 2013-07-11T20:39:53.473 回答