简体   繁体   中英

MPI program hangs at MPI_Recv

I got the above mentioned error on running the following program in C. It uses the MPI library.

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

int main (int argc, char *argv[])
{
  int numranks, rank, dest, tag, source, rc, count;
  char inmsg, outmsg='x';
  MPI_Status Stat;

  MPI_Init(&argc,&argv);
  MPI_Comm_size(MPI_COMM_WORLD, &numranks);
  MPI_Comm_rank(MPI_COMM_WORLD, &rank);
  printf("Task %d starting...\n",rank);

  if (rank == 0) {
    if (numranks > 2) 
      printf("Numranks=%d. Only 2 needed. Ignoring extra...\n",numranks);
    dest = rank + 1;
    source = dest;
    tag = rank;
    rc = MPI_Send(&outmsg, 1, MPI_CHAR, dest, tag, MPI_COMM_WORLD);
    printf("Sent to task %d...\n",dest);
    rc = MPI_Recv(&inmsg, 1, MPI_CHAR, source, tag, MPI_COMM_WORLD, &Stat);
    printf("Received from task %d...\n",source);
  }
  else if (rank == 1) {
    dest = rank - 1;
    source = dest;
    tag = rank;
    rc = MPI_Recv(&inmsg, 1, MPI_CHAR, source, tag, MPI_COMM_WORLD, &Stat);
    printf("Received from task %d...\n",source);
    rc = MPI_Send(&outmsg, 1, MPI_CHAR, dest, tag, MPI_COMM_WORLD);
    printf("Sent to task %d...\n",dest);
}

if (rank < 2) {
    rc = MPI_Get_count(&Stat, MPI_CHAR, &count);
    printf("Task %d: Received %d char(s) from rank %d with tag %d \n",rank, count, Stat.MPI_SOURCE, Stat.MPI_TAG);
  }
MPI_Finalize();
}

Used 4 processes by calling

mpirun -n 4 ./a.out

Runtime output

Task 0 starting...
Numranks=4. Only 2 needed. Ignoring extra...
Task 2 starting...
Task 3 starting...
Sent to task 1...
Task 1 starting...

After this it just hangs. This leads me to believe that there is an issue with MPI_Recv because it says sent to task 1... but does not receive it.

You are using different tag s on the different ranks. In order for the messages to match, you must use the same tag for both communication partners.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM