7

操作的数据速率cudaMemcpy很大程度上受分配用于从 CPU 到 GPU 运行的 PCI-e 3.0(或 2.0)通道数量的影响。我很好奇如何在包含两个 GPU 的 Nvidia 设备上使用 PCI-e 通道。

Nvidia 有一些产品在单个 PCI-e 设备上具有两个 GPU。例如:

  • GTX 590 包含两个 Fermi GF110 GPU
  • GTX 690 包含两个 Kepler GK104 GPU

与许多较新的显卡一样,这些设备安装在PCI-e 16插槽中。对于仅包含一个GPU 的卡,GPU 可以使用 16 个 PCI-e 通道。

如果我的设备包含两个 GPU(如 GTX 690),但我只在其中一个GPU上运行计算作业,那么所有 16 个 PCI-e 通道是否可以为正在使用的一个 GPU 提供服务?


将其显示为 ascii 艺术...

[ GTX690 (2x GF110) ] ------16 PCI-e 通道 ----- [ CPU ]


不是在谈论CPU 连接到两张各有一个 GPU 的卡的情况。(如下图)

[ GTX670 (1x GK104) ] ------ PCI-e 通道 ----- [ CPU ] ------ PCI-e 通道 ----- [ GTX670 (1x GK104) ]

4

1 回答 1

9

GTX 690 使用PLX PCIe Gen 3 桥接芯片将两个 GK104 GPU 与主机 PCIe 总线连接起来。从主机到 PLX 设备以及从 PLX 设备到每个 GPU 的完整 x16 连接(PLX 设备共有 48 个通道)。因此,如果只使用一个 GPU,您可以为该 GPU 实现大约完整的 x16 带宽。您可以通过使用bandwidthTest进行探索包含在 CUDA 样本中。bandwidthTest 将针对单个 GPU(卡上的两个 GPU,可以通过命令行选项选择),您应该会看到大约全带宽,具体取决于系统。如果您的系统支持 Gen3,您应该会看到完整的 PCIe x16 Gen 3 带宽(不要忘记使用 --memory=pinned 选项),这将根据特定系统而有所不同,但应该在 6GB/s 以北(可能在 9-11GB/s 范围内)。如果您的系统支持 Gen2,您应该会看到 4-6GB/s 范围内的数据。GTX 590 也有类似的说法,但它只是 Gen2 设备并使用不同的桥接芯片。bandwidthTest 的结果确认在根端口和任一 GPU 之间存在完整的 x16 逻辑路径。当然没有免费的午餐,

于 2012-10-20T01:01:20.973 回答