具有多个cpu线程的cuda设备选择

Any*_*orn 3 multithreading host cuda gpu

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

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

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

谢谢

fab*_*ioM 7

是的,需要明确设置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.. 
Run Code Online (Sandbox Code Playgroud)

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


jop*_*rat 5

这取决于GPU的设置模式.

打电话nvidia-smi -q找到Compute Mode您的GPU.根据您使用的CUDA框架的版本,输出将不同.

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

要绕过此限制,您可以nvidia-smi -c使用此显式值之一进行调用,具体取决于您的需求:

  • 默认
  • EXCLUSIVE_THREAD
  • 禁止的
  • EXCLUSIVE_PROCESS