【问题标题】:cuda device selection with multiple cpu threads具有多个 cpu 线程的 cuda 设备选择
【发布时间】:2011-02-09 04:13:13
【问题描述】:

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

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

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

谢谢

【问题讨论】:

    标签: multithreading cuda gpu host


    【解决方案1】:

    是的,需要明确设置 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 这是哪一章?
    【解决方案2】:

    这取决于设置 GPU 的模式。

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

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

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

    • 默认
    • EXCLUSIVE_THREAD
    • 禁止
    • EXCLUSIVE_PROCESS

    【讨论】:

      【解决方案3】:

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

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

      EXCLUSIVE_PROCESS 的情况下,同样的机制可以正常工作。

      请参阅 cuda 工具包文档中的 3.4 compute modes

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-07-31
        • 1970-01-01
        • 2021-08-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-10
        • 2016-11-04
        相关资源
        最近更新 更多