CUDA设备选择与多个CPU线程

5

您能告诉我,如果有2个或更多主机线程使用cuda运行时,cuda运行时如何选择GPU设备?

运行时是否为每个线程选择单独的GPU设备?

GPU设备是否需要明确设置?

谢谢

3个回答

8

是的,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.. 

编程指南有一个专门的章节讲解这个。

@fabrizioM 这是哪一章? - syntagma

5
它取决于GPU设置的模式。
调用nvidia-smi -q查找您的GPU的计算模式。根据您使用的CUDA框架版本,输出将不同。
基本上,默认模式设置为GPU。它允许多个上下文在同一GPU上交替运行。但是,每个上下文必须显式地释放GPU:当一个上下文拥有GPU时,其他上下文会被阻塞一段时间,然后在超时后被终止。
要绕过此限制,可以调用nvidia-smi -c并使用其中一个显式值,具体取决于您的需求:
  • DEFAULT
  • EXCLUSIVE_THREAD
  • PROHIBITED
  • EXCLUSIVE_PROCESS

1

是的,GPU设备需要明确设置。

一个简单的策略是将所有GPU设置为EXCLUSIVE_THREAD(如jopasserat所示)。一个线程会遍历所有可用的GPU,并尝试选择一个空闲的GPU直到成功。

EXCLUSIVE_PROCESS的情况下,相同的机制也可以很好地工作。

请参阅CUDA工具包文档中的3.4计算模式


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接