我想在多个GPU上并行运行内核。为此,我使用 cudaSetDevice()
在设备之间切换,然后在相应的设备中启动我的内核。现在,通常一个流中的所有调用都是按顺序执行的,如果它们要并行执行,则必须使用不同的流。使用不同的设备时是否也是如此,或者在这种情况下,我可以在两个设备上的默认流上运行内核调用并且它们仍将并行运行吗?
为每个设备使用非默认流即可从同一主机进程或线程获取多个设备上内核的并发执行。内核启动是异步的,并且非阻塞,因此在单独设备上启动内核的紧密循环应该会产生非平凡内核的执行重叠(请记住,设备上下文切换有延迟(。
有必要使用通常与默认流中的内核一起使用的所有其他主机 API 调用的异步版本,因为其中许多调用(例如 cudaMemcpy 系列(会阻塞。