2-GPU卡上的PCI-e通道分配?

sol*_*les 7 cuda gpu gpgpu nvidia pci-e

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

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)]

Rob*_*lla 9

GTX 690使用PLX PCIe Gen 3桥接芯片将两个GK104 GPU与主机PCIe总线连接.从主机到PLX设备,从PLX设备到每个GPU都有一个完整的x16连接(PLX设备总共有48个通道).因此,如果仅使用一个GPU,则可以为该GPU实现大约完整的x16带宽.您可以使用CUDA示例中包含的bandwidthTest来探索此问题.bandwidthTest将针对单个GPU(卡上的两个GPU,可通过命令行选项选择),您应该看到大约全部带宽,具体取决于系统.如果您的系统支持Gen3,您应该看到完整的PCIe x16 Gen 3带宽(不要忘记使用--memory =固定选项),这将根据具体系统而有所不同,但应该在6GB/s以下(可能是在9-11GB/s范围内).如果您的系统支持Gen2,您应该会看到4-6GB/s范围内的内容.关于GTX 590可以做类似的声明,但它只是Gen2设备并使用不同的桥接芯片.bandwidthTest的结果确认根端口和任一GPU之间存在完整的x16逻辑路径.当然没有免费午餐,因此您无法同时获得两个GPU的全带宽:您受到x16插槽的限制.