5

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

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

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

谢谢

4

3 回答 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.. 

编程指南有一章专门介绍它。

于 2010-04-17T18:16:34.537 回答
5

这取决于设置 GPU 的模式。

调用nvidia-smi -q以查找Compute Mode您的 GPU。根据您使用的 CUDA 框架的版本,输出会有所不同。

基本上,为 GPU 设置了默认模式。它允许多个上下文在同一个 GPU 上交替运行。但是,每个上下文都必须显式释放 GPU:当一个上下文拥有 GPU 时,其他上下文会被阻塞一小段时间,然后在超时后被杀死。

要绕过此限制,您可以nvidia-smi -c根据需要使用此显式值之一进行调用:

  • 默认
  • EXCLUSIVE_THREAD
  • 禁止
  • EXCLUSIVE_PROCESS
于 2011-06-29T15:48:03.087 回答
1

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

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

EXCLUSIVE_PROCESS.

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

于 2012-05-24T10:10:45.493 回答