我听说过点对点内存传输,并阅读了一些相关资料,但实际上并不理解这与标准PCI-E总线传输相比有多快。
我有一个使用多个GPU的CUDA应用程序,可能会对P2P传输感兴趣。我的问题是:它与PCI-E相比有多快?我可以经常使用它让两个设备相互通信吗?
我听说过点对点内存传输,并阅读了一些相关资料,但实际上并不理解这与标准PCI-E总线传输相比有多快。
我有一个使用多个GPU的CUDA应用程序,可能会对P2P传输感兴趣。我的问题是:它与PCI-E相比有多快?我可以经常使用它让两个设备相互通信吗?
CUDA的“peer”指的是另一个能够访问当前GPU数据的GPU。所有计算能力为2.0及更高的GPU都启用了此功能。
点对点内存复制涉及使用cudaMemcpy
通过PCI-E复制内存,如下所示。
cudaMemcpy(dst, src, bytes, cudaMemcpyDeviceToDevice);
请注意,dst
和src
可以在不同的设备上。
cudaDeviceEnablePeerAccess
允许用户启动使用来自多个设备数据的内核。内存访问仍然通过PCI-E完成,并且将具有相同的瓶颈。