3
有誰知道cudaSetDevice
的下列用法是否正確?我想在任何主機線程中隨時調用在不同設備上創建的資源;有沒有辦法在CUDA中做到這一點?關於Open MP和cudaSetDevice()
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.../
};
};
謝謝,但你能解釋爲什麼我必須在單個OMP線程中使用它們嗎?我認爲,如果我可以確保OMP線程之間的同步,使得每次只有一個線程調用一個設備(並且在那裏做某些事情),我可以在任何適當的時候自由調用任何線程的cudaSetDevice()來使用cudaSetDevice()。 – user2188453
我指出在你的例子中,你有OMP線程0代碼,它以'cudaSetDevice(0);'開始,所以你應該只使用設備0。同樣,在線程1中,您以'cudaSetDevice(1);'開頭,所以您應該只使用設備1.這與我參考的示例代碼的工作方式一致。 –