Re: [mpich-discuss] where mpi waitsome only returns one request each time
Try to run on another machine, you may get different results. My configure is $ mpichversion MPICH Version: 3.1.3 MPICH Release date: unreleased development copy MPICH Device: ch3:nemesis MPICH configure: --enable-romio --enable-nemesis-dbg-localoddeven --enable-g=all --enable-fast=O0 --enable-fortran=f77,fc CC=gcc CXX=g++ F77=gfortran FC=gfortran MPICH CC: gcc -g -O0 MPICH CXX: g++ -g -O0 MPICH F77: gfortran -g -O0 MPICH FC: gfortran -g -O0 --Junchao Zhang On Sun, Oct 19, 2014 at 9:23 PM, myself <[email protected]> wrote:
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" <[email protected]> wrote:
I think it is random. For example, I ran your code and its output was:
post recv post send rank 0 10 index 0 rank 0 complete rank 1 1 index 0 rank 1 9 index 1 rank 1 complete
--Junchao Zhang
On Sun, Oct 19, 2014 at 9:48 AM, myself <[email protected]> wrote:
Because I want to understand the behavior of MPI_Waitsome, I change the program as fellow. MPI can waitsome 10 Isend request once time, while waitsome 1 Irecv request each time. Why waitsome-Irecv can not be more than 1 as I expect? ===== 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(); ===== $ mpirun -n 2 ./tests post send post recv rank 0 10 index 0 rank 0 complete rank 1 1 index 0 rank 1 1 index 1 rank 1 1 index 2 rank 1 1 index 3 rank 1 1 index 4 rank 1 1 index 5 rank 1 1 index 6 rank 1 1 index 7 rank 1 1 index 8 rank 1 1 index 9 rank 1 complete
At 2014-10-19 22:36:25, "Bland, Wesley B." <[email protected]> wrote:
You need to move your waitany outside of the if statement so both ranks execute it.
On Oct 19, 2014, at 9:33 AM, myself <[email protected]> wrote:
Here is my test program
======
#include "mpi.h" #include <stdio.h> #include <stdlib.h> #include <sys/time.h>
typedef unsigned char byte;
int main(int argc, char *argv[]){ MPI_Init(&argc, &argv); int rank,size; MPI_Comm_size(MPI_COMM_WORLD, &size); MPI_Comm_rank(MPI_COMM_WORLD, &rank); byte buf[10][10]; MPI_Request req[10]; MPI_Status stat[10]; int outcount; int array_of_indices[10]; int i;
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"); MPI_Waitall(10, req, stat); printf("send over\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 (i=0;i<10;i++){ MPI_Waitsome(10, req, &outcount, array_of_indices, stat); printf("%d index %d\n", outcount, array_of_indices[0]); } } MPI_Finalize(); }
====== get the result like this ====== $ mpirun -n 2 ./tests post send send over post recv 1 index 0 1 index 1 1 index 2 1 index 3 1 index 4 1 index 5 1 index 6 1 index 7 1 index 8 1 index 9
======
I think I should get some completed receive connection, not just 1.
_______________________________________________ discuss mailing list [email protected] To manage subscription options or unsubscribe: https://lists.mpich.org/mailman/listinfo/discuss
_______________________________________________ discuss mailing list [email protected] To manage subscription options or unsubscribe: https://lists.mpich.org/mailman/listinfo/discuss
_______________________________________________ discuss mailing list [email protected] To manage subscription options or unsubscribe: https://lists.mpich.org/mailman/listinfo/discuss
_______________________________________________ discuss mailing list [email protected] To manage subscription options or unsubscribe: https://lists.mpich.org/mailman/listinfo/discuss
participants (1)
-
Junchao Zhang