图灵架构中异步引擎计数的澄清

sga*_*zvi 2 cuda gpu

场景是,我知道 Fermi 中引入的并发复制和执行机制,并在后来的架构中进一步增强,如CUDA C++ 最佳实践指南中所述:

当前的 GPU 可以同时处理异步数据传输和执行内核。具有单个复制引擎的 GPU 可以执行一项异步数据传输并执行内核,而具有两个复制引擎的 GPU 可以同时执行一项从主机到设备的异步数据传输、一项从设备到主机的异步数据传输并执行内核。GPU 上的复制引擎数量由 cudaDeviceProp 结构的 asyncEngineCount 字段给出,该字段也在 deviceQuery CUDA 示例的输出中列出。

当我deviceQuery在 Turing GPU(RTX 2080Ti 和 RTX 2080 SUPER)上执行 CUDA 10.0 的示例时,它显示asyncEngineCount等于3

我只能想象,使用 2 个复制引擎,一个内核可以与一个 H2D 以及一个 D2H 副本同时执行(总共 3 个并发操作)。那么,图灵GPU中的第三引擎的作用是什么?

ter*_*era 5

如果 StackOverflow 允许的话,这个问题可以用一个词来回答:NVLink

例如,对于通过 NVLink 连接的两张卡,除了全带宽主机 <-> 设备传输之外,每张卡的额外复制引擎还允许您通过 NVLink 以全带宽执行双向点对点复制。

对于两张以上的卡,并非所有链接都能同时饱和,因为每张卡只有三个复制引擎。然而,随着链接数量的增加,同时使用所有链接也变得越来越不可能,因为这种方案将很快耗尽主机内存带宽。