【发布时间】:2012-07-07 00:07:56
【问题描述】:
我想改进 MPI-CPU 节点和单个 GPU 之间的“数据传输”算法。
对于 NUMPROCS 节点,每个 MPI 节点都有一个 Ntot/NUMPROCESS float4 的一维数组。
我的算法很简单:
1) 将一维数组 (MPI_GATHER) 聚集在主节点上的一个大数组(大小为 Ntot)中。
2) 使用主节点,通过 cudaMemcpy 函数将大数组发送到 GPU。 CUDA 内核与主节点一起启动。
是否可以避免第一步?我的意思是,每个 MPI 节点都通过 cudaMemcpy 发送其数组,并且连接直接在 GPU 的内存上完成。
【问题讨论】:
-
参与
MPI_GATHER的进程是否与GPU在同一物理主机上运行,还是通过网络进行通信? -
我在四核 CPU 的 4 个核心上使用 MPI_gather。我的 GPU 是 GTX680。我使用 CUDA 4.2 和 MPICH2 版本 1.2.1p1
-
Open MPI 似乎是个好主意,但我没有找到任何 MPI+CUDA 教程...也许还有其他使用 cudastream 的解决方案?
-
在主干 Open MPI 中,它通过将设备指针作为源数据缓冲区参数传递给
MPI_Gather来工作。 Open MPI 检测到指针是设备指针,并在后台使用 CUDA 函数。