cudaMemcpy
操作的数据速率很大程度上受分配用于从CPU运行到GPU的PCI-e 3.0(或2.0)通道的数量的影响。我很好奇PCI-e通道如何在包含两个GPU的Nvidia设备上使用。
Nvidia有一些产品在单个PCI-e设备上有两个GPU。例如:
与许多较新的显卡一样,这些设备安装在PCI-e 16
个插槽中。对于仅包含一个 GPU的卡,GPU可以使用16个PCI-e通道。
如果我的设备包含两个GPU(如GTX 690),但我只在只有一个的GPU上运行计算作业,可以全部16个PCI -e通道服务于正在使用的一个GPU?
将此显示为ascii art ...
[> GTX690(2x GF110)] ------ 16个PCI-e通道----- [ CPU
我没有谈论案例,其中CPU连接到两个每个都有一个GPU的卡。 (如下图所示)
[> GTX670(1x GK104)] ------ PCI-e通道----- [ CPU ] ------ PCI-e车道----- [ GTX670(1x GK104)]
答案 0 :(得分:9)
GTX 690使用PLX PCIe Gen 3 bridge chip将两个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插槽的限制。