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

CUDA: do I need different streams on multiple GPUs to execute in parallel?

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

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

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