首页 > 解决方案 > 我可以使用 cudaMemcpyPeer 在 MPI 分配的不同 GPU 之间传输数据吗?

问题描述

我使用mpi生成多个进程,每个进程对应一个gpu设备。我之前用MPI_Send传输数据,但是速度太慢了。

发现使用cudaMemcpyPeer的传输速度非常快,但是不知道在MPI环境下是否可以使用cudaMemcpyPeer或者cudaMemcpyPeerAsync传输数据。

标签: cudampi

解决方案


这种情况的解决方案是使用 CUDA-aware MPI。它是理解 CUDA 用法的特殊 MPI 版本。特别是,它允许您在 MPI_Send、MPI_Recv 和 MPI_SendRecv 等调用中使用 CUDA 设备指针作为缓冲区指针,并将使用 CUDA 提供的最快的方法(例如,在同一台机器上的 2 个 GPU 之间的对等传输,如果可能的话) 进行数据移动。

各种 MPI 发行版,如OpenMPIMVAPICH都有支持 CUDA 的版本。

您可以通过阅读此博客找到有关它的更多信息。您还可以在标签上找到有关它的问题,cuda例如这个


推荐阅读