<meta http-equiv="Content-Type" content="text/html; charset=utf-8"><div dir="ltr">I think it is random. For example, I ran your code and its output was:<div><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div><div><div>post recv</div></div></div><div><div><div>post send</div></div></div><div><div><div>rank 0 10 index 0</div></div></div><div><div><div>rank 0 complete</div></div></div><div><div><div>rank 1 1 index 0</div></div></div><div><div><div>rank 1 9 index 1</div></div></div><div><div><div>rank 1 complete</div></div></div><div><br></div></blockquote><div><div><div class="gmail_extra"><div><div dir="ltr">--Junchao Zhang</div></div>
<br><div class="gmail_quote">On Sun, Oct 19, 2014 at 9:48 AM, myself <span dir="ltr"><<a href="mailto:chcdlf@126.com" target="_blank">chcdlf@126.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div style="line-height:1.7;color:rgb(0,0,0);font-size:14px;font-family:Arial"><div><span style="line-height:23.7999992370605px">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?</span></div><div><span style="line-height:23.7999992370605px">=====</span></div><div>     MPI_Init(&argc, &argv);</div><div>     MPI_Comm_size(MPI_COMM_WORLD, &size);</div><div>     MPI_Comm_rank(MPI_COMM_WORLD, &rank);</div><span><div> </div><div>     if(rank==0) {</div><div>         for(i =0; i< 10;i++){</div><div>             MPI_Isend(buf[i], 10, MPI_BYTE, 1, 123, MPI_COMM_WORLD, &req[i]);</div><div>         }</div><div>         printf("post send\n");</div></span><span><div>     }else {</div><div>         for(i=0; i< 10;i++){</div><div>             MPI_Irecv(buf[i], 10, MPI_BYTE, 0, 123, MPI_COMM_WORLD, &req[i]);</div><div>         }</div><div>         printf("post recv\n");</div><div>     }</div><div> </div></span><div>     for (;;){</div><span><div>         MPI_Waitsome(10, req, &outcount, array_of_indices, stat);</div></span><div>         complete += outcount;</div><div>         printf("rank %d %d index %d\n", rank, outcount, array_of_indices[0]);</div><div>         if(complete == 10)</div><div>             break;</div><div>     }</div><div>     printf("rank %d complete\n", rank);</div><div>     MPI_Finalize();</div><span><div>=====</div><div>$ mpirun -n 2 ./tests</div><div>post send</div></span><div>post recv</div><div>rank 0 10 index 0</div><div>rank 0 complete</div><div>rank 1 1 index 0</div><div>rank 1 1 index 1</div><div>rank 1 1 index 2</div><div>rank 1 1 index 3</div><div>rank 1 1 index 4</div><div>rank 1 1 index 5</div><div>rank 1 1 index 6</div><div>rank 1 1 index 7</div><div>rank 1 1 index 8</div><div>rank 1 1 index 9</div><div>rank 1 complete</div><div><div><div><br></div><br><br><br><div></div><div></div><br>At 2014-10-19 22:36:25, "Bland, Wesley B." <<a href="mailto:wbland@anl.gov" target="_blank">wbland@anl.gov</a>> wrote:<br> <blockquote style="padding-left:1ex;margin:0px 0px 0px 0.8ex;border-left-color:rgb(204,204,204);border-left-width:1px;border-left-style:solid">




<div>You need to move your waitany outside of the if statement so both ranks execute it. <br>
<br>
<br>
</div>
<div><br>
On Oct 19, 2014, at 9:33 AM, myself <<a href="mailto:chcdlf@126.com" target="_blank">chcdlf@126.com</a>> wrote:<br>
<br>
</div>
<blockquote type="cite">
<div>
<div style="line-height:1.7;color:rgb(0,0,0);font-size:14px;font-family:Arial">
<div>Here is my test program</div>
<br>
<span style="line-height:23.7999992370605px">======</span>
<div><br>
</div>
<div>
<div> #include "mpi.h"</div>
<div> #include <stdio.h></div>
<div> #include <stdlib.h></div>
<div> #include <sys/time.h></div>
<div> </div>
<div>
<div> typedef unsigned char byte;</div>
<div> </div>
<div> int main(int argc, char *argv[]){</div>
<div>     MPI_Init(&argc, &argv);</div>
<div>     int rank,size;</div>
<div>     MPI_Comm_size(MPI_COMM_WORLD, &size);</div>
<div>     MPI_Comm_rank(MPI_COMM_WORLD, &rank);</div>
<div>     byte buf[10][10];</div>
<div>     MPI_Request req[10];</div>
<div>     MPI_Status stat[10];</div>
<div>     int outcount;</div>
<div>     int array_of_indices[10];</div>
<div>     int i;</div>
<div> </div>
<div>     if(rank==0) {</div>
<div>         for(i =0; i< 10;i++){</div>
<div>             MPI_Isend(buf[i], 10, MPI_BYTE, 1, 123, MPI_COMM_WORLD, &req[i]);</div>
<div>         }</div>
<div>         printf("post send\n");</div>
<div>         MPI_Waitall(10, req, stat);</div>
<div>         printf("send over\n");</div>
<div>     }else {</div>
<div>         for(i=0; i< 10;i++){</div>
<div>             MPI_Irecv(buf[i], 10, MPI_BYTE, 0, 123, MPI_COMM_WORLD, &req[i]);</div>
<div>         }</div>
<div> </div>
<div>         printf("post recv\n");</div>
<div>         for (i=0;i<10;i++){</div>
<div>             MPI_Waitsome(10, req, &outcount, array_of_indices, stat);</div>
<div>             printf("%d index %d\n", outcount, array_of_indices[0]);</div>
<div>         }</div>
<div>     }</div>
<div>     MPI_Finalize();</div>
<div> }</div>
</div>
</div>
<div><br>
</div>
<div>======</div>
<div><span style="line-height:1.7"> get the result like this</span></div>
<div>======</div>
<div>
<div>
<div>$ mpirun -n 2 ./tests</div>
<div>post send</div>
<div>send over</div>
<div>post recv</div>
<div>1 index 0</div>
<div>1 index 1</div>
<div>1 index 2</div>
<div>1 index 3</div>
<div>1 index 4</div>
<div>1 index 5</div>
<div>1 index 6</div>
<div>1 index 7</div>
<div>1 index 8</div>
<div>1 index 9</div>
</div>
</div>
<div><br>
</div>
<div><span style="line-height:23.7999992370605px">======</span></div>
<div><span style="line-height:23.7999992370605px"><br>
</span></div>
<div><span style="line-height:23.7999992370605px">I think I should get some completed receive connection, not just 1.</span></div>
<div><br>
</div>
<div><br>
</div>
</div>
<br>
<br>
<span title="neteasefooter"><span></span></span></div>
</blockquote>
<blockquote type="cite">
<div><span>_______________________________________________</span><br>
<span>discuss mailing list     <a href="mailto:discuss@mpich.org" target="_blank">discuss@mpich.org</a></span><br>
<span>To manage subscription options or unsubscribe:</span><br>
<span><a href="https://lists.mpich.org/mailman/listinfo/discuss" target="_blank">https://lists.mpich.org/mailman/listinfo/discuss</a></span></div>
</blockquote>


</blockquote></div></div></div><br><br><span title="neteasefooter"><span></span></span><br>_______________________________________________<br>
discuss mailing list     <a href="mailto:discuss@mpich.org" target="_blank">discuss@mpich.org</a><br>
To manage subscription options or unsubscribe:<br>
<a href="https://lists.mpich.org/mailman/listinfo/discuss" target="_blank">https://lists.mpich.org/mailman/listinfo/discuss</a><br></blockquote></div><br></div></div></div></div></div>