MPI:独立(非重叠)流程对

时间:2016-08-04 21:45:15

标签: c multiprocessing mpi openmpi

我想在多个进程之间同时传输数据,我知道如何做到这一点,但也许我看不到隐藏的陷阱。

在下面的MPI示例中,我有6个进程(编号从0到5),我想发送一个MPI_DOUBLE值,从0到1,从2到3,从4到5。 显然没有重叠,所以应该可以同时(同时)进行所有三次传输吗?我不希望其他4个进程等到0和1在2到3次启动之前完成,依此类推。 这是我的示例解决方案:

int rankid; // 0,..,5
double sendb, recvb;

if (rankid%6 == 0) { // processes 0,2,4
    MPI_Send(&sendb, 1, MPI_DOUBLE, rank+1, 0, MPI_COMM_WORLD);
} else {
    MPI_Recv(&recvb, 1, MPI_DOUBLE, rank-1, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
}

在此代码中,发送和接收进程有自己的路径,从技术上讲,每个对都可以同时进行通信。但这真的在实践中有效吗?是否有一些技术问题取决于硬件或类似的东西? 我天真地期待有三条非相交的车道,每条车道完全独立于其他车道,但可能并非如此。也许每个传输的信息都必须通过一些中心节点?

我已经创建了一个更复杂的应用程序,我注意到在我的家用电脑上运行相同的程序(一个带有6个线程的cpu)比在更大的集群计算机上运行速度更快(每个有16个线程的6个节点) =总共96个过程。

0 个答案:

没有答案