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.