MPI + CUDA:具有多个CPU主机(MPI)和单个GPU(CUDA)的CPU到GPU数据传输

时间:2012-07-06 14:04:57

标签: cuda mpi

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

使用NUMPROCS节点,每个MPI节点都有一个带有Ntot / NUMPROCESS float4的1D阵列。

我的算法非常简单:

1)在主节点上收集大数组(大小为Ntot)的1D数组(MPI_GATHER)。

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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

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