您能告诉我,如果有2个或更多主机线程使用cuda运行时,cuda运行时如何选择GPU设备?
运行时是否为每个线程选择单独的GPU设备?
GPU设备是否需要明确设置?
谢谢
您能告诉我,如果有2个或更多主机线程使用cuda运行时,cuda运行时如何选择GPU设备?
运行时是否为每个线程选择单独的GPU设备?
GPU设备是否需要明确设置?
谢谢
是的,GPU设备需要明确设置,否则将使用默认设备(通常是设备0)。
请注意,一旦运行时开始使用一个设备,同一线程中调用的所有函数都将固定在该设备上。
我发现在启动线程时有些东西很有用
cudaThreadExit(); // clears all the runtime state for the current thread
cudaSetDevice(deviceId); // explicit set the current device for the other calls
cudaMalloc
cudaMemcpy
etc..
nvidia-smi -q
查找您的GPU的计算模式
。根据您使用的CUDA框架版本,输出将不同。nvidia-smi -c
并使用其中一个显式值,具体取决于您的需求:
是的,GPU设备需要明确设置。
一个简单的策略是将所有GPU设置为EXCLUSIVE_THREAD
(如jopasserat所示)。一个线程会遍历所有可用的GPU,并尝试选择一个空闲的GPU直到成功。
在EXCLUSIVE_PROCESS
的情况下,相同的机制也可以很好地工作。
请参阅CUDA工具包文档中的3.4计算模式。