我有一个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的整数