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