3

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

4

1 回答 1

6

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

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

于 2016-02-14T21:26:22.797 回答