在我的实验中,我发现MPI通讯时间非常长,甚至超过了计算时间。
我找到了解决此问题的方法,例如重叠的计算操作和通信操作。
同时,我发现了MPI_Isend
函数。它是一种无阻塞通信功能。所以我想知道是否可以使用MPI_Isend
进行并行通信。
具体示例如下:
进程1需要将不同的数据传输到其他4个进程。
换句话说,发送的数据是不同的,接受的过程是不同的,并且它们之间没有干扰。
因此,我在想,我可以使用4个非阻塞通信函数,例如MPI_Isend
,因为该通信函数是非阻塞的,所以在调用该函数后,它将立即返回,以便调用下一个功能。
我想用这种方法来实现4数据并行传输。
代码如下:
MPI_Isend(&buffertop_to_bot[1][1][1],NX*NZ*nf2,MPI_FLOAT,INDEX[3],TAG5,MPI_COMM_WORLD,&request);
MPI_Isend(&bufferbot_to_top[1][1][1],NX*NZ*nf1,INDEX[4],TAG6,&request);
MPI_Isend(&bufferlef_to_rig[1][1][1],NY*NZ*nf2,INDEX[1],TAG1,&request);
MPI_Isend(&bufferrig_to_lef[1][1][1],NY*NZ*nf1,INDEX[2],TAG2,&request);
MPI_Wait(&request,&status);
这种方法可以实现我的目标吗?
能给我一些建议或相关论文吗?或其他解决通信时间长的方法。
感谢您阅读。
我是新手,以上描述由Google翻译