一机多GPU设备之间的直接传输问题

我现在做的这台机器上装有四块GPU,型号一样都是Tesla C2050,但是运行的时候发现这四块卡是两两之间可P2P的,0号卡和1号卡可以传,2号卡和3号卡可以传,但,1号卡和2号卡就不行了,想问一下有可能是什么原因,是总线或者主板架构的问题么?

楼主说的,两两不能p2p copy能否继续说明下?

据我所知,无论在A家还是I家的板子上,都是可以进行P2P copy的。

唯一的区别是,在I家,某种情况下(似乎是不在同一个root complex下), 则需要通过内存进行中转。

但这个中转,是自动的。

以及,在较老的驱动和cuda toolkit下,您可能会遇到在I家板子上的P2P copy问题。此时则建议您升级到最近驱动。

即:
(1)给出更确切的信息。
(2)如果不是最新驱动/toolkit,请使用最新驱动/tookit。

您使用的函数是cudaMemcpy而不是cudaMemcpyPeer?

如果两个GPU连接到同一个CPU上,p2p是没有问题的,如果连到不同的CPU上,p2p就不行了.

如果您的机器是双路的,那么就有可能,建议使用lspci -vt查看一下.

1)现在还只是测试一下系统,还没有实际进行数据传输,我先使用
cudaDeviceCanAccessPeer(&can_access_peer[i][j],gpuid[i],gpuid[j]);
发现can_access_peer[0][1]==can_access_peer[1][0]==can_access_peer[2][3]==can_access_peer[3][2]==1;但是can_access_peer[1][2]和can_access_peer[2][1]==0;
2)驱动和toolkit都是4.2的,要升到5.0吗?

很有可能是您说的这个问题,具体怎么查看,您能再说得详细一点吗?

楼主您好,4.2可以了。无需升级。(如果您想升级也行。到最新驱动还是不错的)。

感谢风大指出官方说法:不能跨CPU进行P2P copy。

以及,
(1)其他不靠谱资料指出,这个在AMD的双路CPU上是无问题的(通过hyper-transport中转)
(2)同时不靠谱资料指出,只有Intel的CPU受到影响(无法跨Intel I/O Hub进行PCI-E mastering)。
(3)同时不靠谱资料指出,可以强上cudaMemcpy的。在intel双路cpu这种不支持的情况下,会自动通过host memory中转(即自动复制2次。GPU1 → CPU, CPU → GPU2)。

以上信息仅供参考, 如有矛盾,请以风大为主。

请使用lspci -vt查看GPU连接到那个CPU上.如我的机器就可以看到:
-[0000:00]-±00.0 Intel Corporation Sandy Bridge DMI2
±01.0-[01]----00.0 NVIDIA Corporation Device 1022
±02.0-[02]–±00.0 NVIDIA Corporation GF108 [GeForce GT 420]

请问这个指令时要在哪里输入呢?windows系统下也是这个指令么?

LZ您好,关于lspci命令,您可以参考如下的链接:

http://en.wikipedia.org/wiki/Lspci

http://linux.die.net/man/8/lspci

WIN下有否类似的命令,我不清楚,请其他人继续补充。

祝您好运~

windows下不是lspci命令,但是您可以通过“设备管理器"来查看您的PCI/PCI-E设备连接信息。

设备管理器可以通过鼠标右键点击您的“计算机”图标,并选择属性。并在弹出的窗口中选择“设备管理器”。即可查看。

如图(附件)

[attach]3041[/attach]