两张3080之间如何实现P2P?

  • 3 replies
  • 1474 views
两张3080之间如何实现P2P?
« 于: 十月 03, 2021, 07:30:39 pm »
想在两张3080上进行数据传输,目前没有nvlink,使用官方测试样例代码得到的结果如附件图片中所示,信息提示是不支持peer access,我在我的项目中使用的是这个帖子里面的without uva的函数代码https://stackoverflow.com/questions/22694518/what-is-the-difference-between-cudamemcpy-and-cudamemcpypeer-for-p2p-copy
程序代码: [选择]
// Set device 0 as current
cudaSetDevice(0);
float* p0;
size_t size = 1024 * sizeof(float);
// Allocate memory on device 0
cudaMalloc(&p0, size);
// Set device 1 as current
cudaSetDevice(1);
float* p1;
// Allocate memory on device 1
cudaMalloc(&p1, size);
// Set device 0 as current
cudaSetDevice(0);
// Launch kernel on device 0
MyKernel<<<1000, 128>>>(p0);
// Set device 1 as current
cudaSetDevice(1);
// Copy p0 to p1
cudaMemcpyPeer(p1, 1, p0, 0, size);
// Launch kernel on device 1
MyKernel<<<1000, 128>>>(p1);
结果也发现是会先拷贝到内存中,然后再拷贝到另一张卡上。
但是我在群里提问,群里有[名词6]回复说是如果没有nvlink会走PCIE直接进行两张卡之间的通信,如果[名词6]的回答是正确的,那么是哪里出了问题呢?我该怎么实现P2P?

Re: 两张3080之间如何实现P2P?
« 回复 #1 于: 十月 08, 2021, 12:35:46 pm »
想在两张3080上进行数据传输,目前没有nvlink,使用官方测试样例代码得到的结果如附件图片中所示,信息提示是不支持peer access,我在我的项目中使用的是这个帖子里面的without uva的函数代码https://stackoverflow.com/questions/22694518/what-is-the-difference-between-cudamemcpy-and-cudamemcpypeer-for-p2p-copy
程序代码: [选择]
// Set device 0 as current
cudaSetDevice(0);
float* p0;
size_t size = 1024 * sizeof(float);
// Allocate memory on device 0
cudaMalloc(&p0, size);
// Set device 1 as current
cudaSetDevice(1);
float* p1;
// Allocate memory on device 1
cudaMalloc(&p1, size);
// Set device 0 as current
cudaSetDevice(0);
// Launch kernel on device 0
MyKernel<<<1000, 128>>>(p0);
// Set device 1 as current
cudaSetDevice(1);
// Copy p0 to p1
cudaMemcpyPeer(p1, 1, p0, 0, size);
// Launch kernel on device 1
MyKernel<<<1000, 128>>>(p1);
结果也发现是会先拷贝到内存中,然后再拷贝到另一张卡上。
但是我在群里提问,群里有[名词6]回复说是如果没有nvlink会走PCIE直接进行两张卡之间的通信,如果[名词6]的回答是正确的,那么是哪里出了问题呢?我该怎么实现P2P?

你好,从20系列的卡开始,您必须购买一块NVLink桥,才能实现直接卡到卡的P2P Access和Copy。

而以前的老版本中,却是可以通过走PCI-E的(虽然慢点,但双向也有20多GB/s了)。现在不买桥是不能用的。请尽快买桥(不到1000元一个)。

Re: 两张3080之间如何实现P2P?
« 回复 #2 于: 十月 08, 2021, 12:36:17 pm »
你好,从20系列的卡开始,您必须购买一块NVLink桥,才能实现直接卡到卡的P2P Access和Copy。

而以前的老版本中,却是可以通过走PCI-E的(虽然慢点,但双向也有20多GB/s了)。现在不买桥是不能用的。请尽快买桥(不到1000元一个)。

我司之前的Sisiy妹子,曾经单独测试过这个问题,并且发过公众号,可能她会稍后回复你相应的公众号文章的地址。

Re: 两张3080之间如何实现P2P?
« 回复 #3 于: 十月 08, 2021, 02:21:42 pm »
我司之前的Sisiy妹子,曾经单独测试过这个问题,并且发过公众号,可能她会稍后回复你相应的公众号文章的地址。

根据核对楚星提供的信息,和Wikipedia上的Spec,3080并不支持NVLink桥了,30系列只有3090一款支持。

如果是这个样子的话,那么可能3080并不支持任何形式的P2P的Access和直接传输了,没有更好的办法。

如果你有更多发现,欢迎告诉我们。