【发布时间】:2016-02-14 21:10:25
【问题描述】:
我想在多个 GPU 上并行运行内核。为此,我使用cudaSetDevice() 在设备之间切换,然后在相应设备中启动我的内核。现在,通常一个流中的所有调用都是按顺序执行的,如果它们应该并行执行,则必须使用不同的流。使用不同设备时是否也是这种情况,或者在这种情况下我可以在两个设备上的默认流上运行我的内核调用并且它们仍将并行运行?
【问题讨论】:
标签: parallel-processing cuda multi-gpu
我想在多个 GPU 上并行运行内核。为此,我使用cudaSetDevice() 在设备之间切换,然后在相应设备中启动我的内核。现在,通常一个流中的所有调用都是按顺序执行的,如果它们应该并行执行,则必须使用不同的流。使用不同设备时是否也是这种情况,或者在这种情况下我可以在两个设备上的默认流上运行我的内核调用并且它们仍将并行运行?
【问题讨论】:
标签: parallel-processing cuda multi-gpu
不必为每个设备使用非默认流来从同一主机进程或线程在多个设备上同时执行内核。内核启动是异步的,并且 非阻塞,因此内核在不同设备上启动的紧密循环应该会为非平凡内核产生执行重叠(请记住,设备上下文切换有延迟)。
必须使用所有其他主机 API 调用的异步版本,您通常会在默认流中与内核一起使用,因为其中许多(cudaMemcpy 系列,例如示例)阻止。
【讨论】: