CUDA:我需要多个GPU上的不同流并行执行吗?

bwe*_*ber 3 parallel-processing cuda multi-gpu

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

tal*_*ies 6

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

需要使用所有其他主机API调用您通常会结合在默认流内核使用的异步版本,因为其中许多(在cudaMemcpy家庭,例如)的块.

  • 作为另一个参考点,无论如何,流和事件都是[特定于设备](http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#stream-and-event-behavior).因此,如果您使用明确定义的流,则*必须*在切换到其他设备时使用不同的流.并且隐含地,每个设备有一个单独的默认流. (2认同)