[mpich-discuss] where mpi waitsome only returns one request each time

Junchao Zhang jczhang at mcs.anl.gov
Sun Oct 19 20:02:39 CDT 2014


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 <chcdlf at 126.com> 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." <wbland at anl.gov> 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 <chcdlf at 126.com> 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     discuss at mpich.org
> To manage subscription options or unsubscribe:
> https://lists.mpich.org/mailman/listinfo/discuss
>
>
>
>
> _______________________________________________
> discuss mailing list     discuss at mpich.org
> To manage subscription options or unsubscribe:
> https://lists.mpich.org/mailman/listinfo/discuss
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mpich.org/pipermail/discuss/attachments/20141019/fae7a22b/attachment.html>
-------------- next part --------------
_______________________________________________
discuss mailing list     discuss at mpich.org
To manage subscription options or unsubscribe:
https://lists.mpich.org/mailman/listinfo/discuss


More information about the discuss mailing list