I run several times of the program, the results are as the same as before. Could you tell me your
MPICH version and compiling parameters? The version of my MPICH is 3.1.3, I compile it as
$ mpirun --version
HYDRA build details:
Version: 3.1.3
Release Date: Wed Oct 8 09:37:19 CDT 2014
CC: gcc -fPIC
CXX: g++
F77: gfortran
F90: gfortran
Configure options: '--disable-option-checking' '--prefix=/usr/local/mpich3' '--with-device=ch3:nemesis' 'CFLAGS=-fPIC -O2' '--disable-fortran' '--cache-file=/dev/null' '--srcdir=.' 'CC=gcc' 'LDFLAGS= ' 'LIBS=-lpthread ' 'CPPFLAGS= -I/home/valder/Downloads/Software/mpi/mpich-3.1.3/src/mpl/include -I/home/valder/Downloads/Software/mpi/mpich-3.1.3/src/mpl/include -I/home/valder/Downloads/Software/mpi/mpich-3.1.3/src/openpa/src -I/home/valder/Downloads/Software/mpi/mpich-3.1.3/src/openpa/src -D_REENTRANT -I/home/valder/Downloads/Software/mpi/mpich-3.1.3/src/mpi/romio/include'
Process Manager: pmi
Launchers available: ssh rsh fork slurm ll lsf sge manual persist
Topology libraries available: hwloc
Resource management kernels available: user slurm ll lsf sge pbs cobalt
Checkpointing libraries available:
Demux engines available: poll select
the whole program is
=========
#include "mpi.h"
#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
typedef unsigned char byte;
int main(int argc, char *argv[]){
int rank,size;
byte buf[10][10];
MPI_Request req[10];
MPI_Status stat[10];
int outcount;
int array_of_indices[10];
int i;
int complete = 0;
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &size);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
if(rank==0) {
for(i =0; i< 10;i++){
MPI_Isend(buf[i], 10, MPI_BYTE, 1, 123, MPI_COMM_WORLD, &req[i]);
}
printf("post send\n");
}else {
for(i=0; i< 10;i++){
MPI_Irecv(buf[i], 10, MPI_BYTE, 0, 123, MPI_COMM_WORLD, &req[i]);
}
printf("post recv\n");
}
for (;;){
MPI_Waitsome(10, req, &outcount, array_of_indices, stat);
complete += outcount;
printf("rank %d %d index %d\n", rank, outcount, array_of_indices[0]);
if(complete == 10)
break;
}
printf("rank %d complete\n", rank);
MPI_Finalize();
}
=========
I compile it as
$ mpicc -o tests testsome.c
and run as
$ mpirun -n 2 ./tests
At 2014-10-20 09:02:39, "Junchao Zhang" <jczhang@mcs.anl.gov> wrote:
I think it is random. For example, I ran your code and its output was: