C,MPI:程序不会显示正确的输出

时间:2018-10-06 08:48:11

标签: c mpi

我有一个MPI程序,可以使用2、3、14、61 ... ... X个进程。
在这些进程中,排名为奇数的进程发送消息,而排名为0的进程接收消息并显示它们。
但是,当我的程序运行15个或64个进程时,它仅显示1条消息。
这是我的代码:

#include "mpi.h"
#include <stdio.h>

int main( int argc, char * argv[] )
{
    int rank, i =0;
    int sendMsg = 123;
    int recvMsg = 0;
    int flag = 0;
    int count;
    MPI_Status status;
    MPI_Request request;
    int errs = 0;
    double start = MPI_Wtime();
    MPI_Init( 0, 0 );

    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
    if(rank == 0)
    {
        while(!flag)
        {
            MPI_Iprobe( MPI_ANY_SOURCE, 0, MPI_COMM_WORLD, &flag, &status );

        }

        MPI_Recv( &recvMsg, 1, MPI_INT, MPI_ANY_SOURCE, 0, MPI_COMM_WORLD, &status );

        printf("Received message from process %d\n",status.MPI_SOURCE);

    }
    else{
        if(rank % 2 != 0){
            printf("Sent from process: %d\n",rank );
            MPI_Isend( &sendMsg, 1, MPI_INT, 0, 0, MPI_COMM_WORLD, &request );
            MPI_Wait( &request, &status );
        }

    }

    MPI_Finalize();
    return errs;
}

这是我的输出:

Sent from process: 1
Sent from process: 5
Sent from process: 3
Sent from process: 7
Received message from process 3

如您所见,我希望输出也能说它从进程1,5和7接收到消息。
我如何实现我的目标?我的程序也应该终止。谢谢

如何在终端中运行代码:

mpicc main.c -o main -Wall  
mpirun -np X main

其中X是大于或等于2的整数

0 个答案:

没有答案