Hi Florin,
I don’t think you’re hitting any bug, and I’d say both behaviors are correct. Note that when you do a sleep the MPI implementation is not making any progress, so if the Isend call didn’t push the message immediately to the network, which is likely to be more the case on an HPC network than on a socket-based one, the sleep is unproductive, and so the Iprobe returns nothing arrived.
Best,
Toni
--------------------------------------------------------------
Antonio J. Peņa
Postdoctoral Appointee
Mathematics and Computer Science Division (MCS)
Argonne National Laboratory
9700 S. Cass Avenue
Argonne, IL 60439
Building 340 - Office 3148
apenya@mcs.anl.gov
(+1) 630-252-7928
From: Isaila, Florin D. [mailto:fisaila@mcs.anl.gov]
Sent: Thursday, November 20, 2014 4:20 PM
To: mpich-discuss@mcs.anl.gov
Subject: [mpich-discuss] MPI_Iprobe bug in MPICH for BGQ?
Hi,
when I run the program from below on 1 node on BGQ (Vesta), the message is not received (flag is 0). However on a Ubuntu, the message is received (flag is non-zero).
If I add another Iprobe (uncomment the Iprobe in the code below) the message is received on both BGQ and Ubuntu. Note that the program sleeps for 1 second after the Isend. Is it a bug?
This happens for both MPICH-3.1.3 and MPICH-3.1.
#include "mpi.h"
#include <stdio.h>
#include <unistd.h>
int main(int argc, char **argv)
{
int send_int, recv_int, tag, flag;
MPI_Status status;
MPI_Request req;
MPI_Init(&argc, &argv);
tag = 0;
send_int = 100;
MPI_Isend(&send_int, 1, MPI_INT, 0, tag, MPI_COMM_WORLD, &req );
sleep(1);
MPI_Iprobe(MPI_ANY_SOURCE , MPI_ANY_TAG, MPI_COMM_WORLD, &flag, &status );
//MPI_Iprobe(MPI_ANY_SOURCE , tag, MPI_COMM_WORLD, &flag, &status );
if (flag) {
MPI_Recv( &recv_int, 1, MPI_INT, MPI_ANY_SOURCE, tag, MPI_COMM_WORLD, &status);
printf("Received = %d\n", recv_int);
}
else
printf("Message not received yet");
MPI_Waitall(1, &req, MPI_STATUSES_IGNORE);
MPI_Finalize();
return 0;
}
Thanks
Florin