<meta http-equiv="Content-Type" content="text/html; charset=gb2312"><div style="line-height:1.7;color:#000000;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><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>     }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><div>     for (;;){</div><div>         MPI_Waitsome(10, req, &outcount, array_of_indices, stat);</div><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><div>=====</div><div>$ mpirun -n 2 ./tests</div><div>post send</div><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><br></div><br><br><br><div></div><div id="divNeteaseMailCard"></div><br>At 2014-10-19 22:36:25, "Bland, Wesley B." <wbland@anl.gov> wrote:<br> <blockquote id="isReplyContent" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px 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">chcdlf@126.com</a>> wrote:<br>
<br>
</div>
<blockquote type="cite">
<div>
<div style="line-height:1.7;color:#000000;font-size:14px;font-family:Arial">
<div>Here is my test program</div>
<br class="Apple-interchange-newline">
<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 id="netease_mail_footer"></span></span></div>
</blockquote>
<blockquote type="cite">
<div><span>_______________________________________________</span><br>
<span>discuss mailing list     <a href="mailto:discuss@mpich.org">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">https://lists.mpich.org/mailman/listinfo/discuss</a></span></div>
</blockquote>


</blockquote></div><br><br><span title="neteasefooter"><span id="netease_mail_footer"></span></span>