1

我想改进 MPI-CPU 节点和单个 GPU 之间的“数据传输”算法。

对于 NUMPROCS 节点,每个 MPI 节点都有一个 Ntot/NUMPROCESS float4 的一维数组。

我的算法很简单:

1) 将一维数组 (MPI_GATHER) 聚集在主节点上的一个大数组 (大小 Ntot) 中。

2) 使用主节点,通过 cudaMemcpy 函数将大数组发送到 GPU。CUDA 内核与主节点一起启动。

是否可以避免第一步?我的意思是,每个 MPI 节点通过 cudaMemcpy 发送其数组,并且连接直接在 GPU 的内存上完成。

4

1 回答 1

1

由于您的 MPI-CPU 节点与 GPU 在同一物理主机上运行,​​因此您可以避免第一步。

您可以使用异步函数CudaMemcpyAsync()来执行您的第二步。该函数有一个流参数。它有助于同时进行 GPU 计算memcpy

在每个进程中,您都可以使用CudaSetDevice(devicenumber)来控制您选择的 GPU。

有关详细信息,请参阅 CUDA 手册。

于 2012-09-20T08:07:56.370 回答