【问题标题】:CUDA: do I need different streams on multiple GPUs to execute in parallel?CUDA:我是否需要多个 GPU 上的不同流并行执行?
【发布时间】:2016-02-14 21:10:25
【问题描述】:

我想在多个 GPU 上并行运行内核。为此,我使用cudaSetDevice() 在设备之间切换,然后在相应设备中启动我的内核。现在,通常一个流中的所有调用都是按顺序执行的,如果它们应该并行执行,则必须使用不同的流。使用不同设备时是否也是这种情况,或者在这种情况下我可以在两个设备上的默认流上运行我的内核调用并且它们仍将并行运行?

【问题讨论】:

    标签: parallel-processing cuda multi-gpu


    【解决方案1】:

    不必为每个设备使用非默认流来从同一主机进程或线程在多个设备上同时执行内核。内核启动是异步的,并且 非阻塞,因此内核在不同设备上启动的紧密循环应该会为非平凡内核产生执行重叠(请记住,设备上下文切换有延迟)。

    必须使用所有其他主机 API 调用的异步版本,您通常会在默认流中与内核一起使用,因为其中许多(cudaMemcpy 系列,例如示例)阻止。

    【讨论】:

    • 作为另一个参考点,流和事件无论如何都是device-specific。因此,如果您使用明确定义的流,当您切换到不同的设备时,您必须使用不同的流。并且隐含地,每个设备都有一个单独的默认流。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-19
    • 1970-01-01
    • 1970-01-01
    • 2014-04-05
    • 2011-07-13
    • 2012-10-01
    相关资源
    最近更新 更多