Diego, there is some confusion here... MPI_Waitall is not a collective operations, and a given tasks can only wait the requests it initiated.
bottom line, each task does exactly one send and one recv, right ? in this case, you want to have an array of two requests, isend with the first element and irecv with the second element, and then waitall the array of size 2 note this is not equivalent to doing two MPI_Wait in a row, since that would be prone to deadlock Cheers, Gilles On Wednesday, September 30, 2015, Diego Avesani <diego.aves...@gmail.com> wrote: > Dear all, > thank for the explanation, but something is not clear to me. > I have 4 CPUs. I use only three of them to send, let say: > CPU 0 send to CPU 1 > CPU 1 send to CPU 2 > CPU 2 send to CPU 3 > > only three revive, let's say; > CPU 1 from CPU 0 > CPU 2 from CPU 1 > CPU 3 from CPU 2 > > so I use ALLOCATE(send_request(3)) > > this mean that in the call I have: > CALL MPI_ISEND(send_messageL, MsgLength, MPI_DOUBLE_COMPLEX, > MPIdata%rank-1, MPIdata%rank, MPI_COMM_WORLD, *send_request(MPIdata%rank)*, > MPIdata%iErr) > > This is what my code does. Problably, the use of send_request(:) as a > vectror and the use of WAITALL is not correct, I am right? > > what do you suggest? > > Thanks a lot, > Diego > > > Diego > > > On 30 September 2015 at 12:42, Jeff Squyres (jsquyres) <jsquy...@cisco.com > <javascript:_e(%7B%7D,'cvml','jsquy...@cisco.com');>> wrote: > >> Put differently: >> >> - You have an array of N requests >> - If you're only filling up M of them (where N<M) >> - And then you pass the whole array of size N to MPI >> - Then N-M of them will have garbage values (unless you initialize them >> to MPI_REQUEST_NULL) >> - And MPI's behavior with garbage values will be unpredictable / undefined >> >> You can either pass M (i.e., the number of requests that you have >> *actually* filled) to MPI, or you can ensure that the N-M unused requests >> in the array are filled with MPI_REQUEST_NULL (which MPI_WAITANY and >> friends will safely ignore). One way of doing the latter is initializing >> the entire array with MPI_REQUEST_NULL and then only filling in the M >> entries with real requests. >> >> It seems much simpler / faster to just pass in M to MPI_WAITANY (any >> friends), not N. >> >> >> > On Sep 30, 2015, at 3:43 AM, Diego Avesani <diego.aves...@gmail.com >> <javascript:_e(%7B%7D,'cvml','diego.aves...@gmail.com');>> wrote: >> > >> > Dear Gilles, Dear All, >> > >> > What do you mean that the array of requests has to be initialize via >> MPI_Isend or MPI_Irecv? >> > >> > In my code I use three times MPI_Isend and MPI_Irecv so I have a >> send_request(3). According to this, do I have to use MPI_REQUEST_NULL? >> > >> > In the meantime I check my code >> > >> > Thanks >> > >> > Diego >> > >> > >> > On 29 September 2015 at 16:33, Gilles Gouaillardet < >> gilles.gouaillar...@gmail.com >> <javascript:_e(%7B%7D,'cvml','gilles.gouaillar...@gmail.com');>> wrote: >> > Diego, >> > >> > if you invoke MPI_Waitall on three requests, and some of them have not >> been initialized >> > (manually, or via MPI_Isend or MPI_Irecv), then the behavior of your >> program is undetermined. >> > >> > if you want to use array of requests (because it make the program >> simple) but you know not all of them are actually used, then you have to >> initialize them with MPI_REQUEST_NULL >> > (it might be zero on ompi, but you cannot take this for granted) >> > >> > Cheers, >> > >> > Gilles >> > >> > >> > On Tuesday, September 29, 2015, Diego Avesani <diego.aves...@gmail.com >> <javascript:_e(%7B%7D,'cvml','diego.aves...@gmail.com');>> wrote: >> > dear Jeff, dear all, >> > I have notice that if I initialize the variables, I do not have the >> error anymore: >> > ! >> > ALLOCATE(SEND_REQUEST(nMsg),RECV_REQUEST(nMsg)) >> > SEND_REQUEST=0 >> > RECV_REQUEST=0 >> > ! >> > >> > Could you please explain me why? >> > Thanks >> > >> > >> > Diego >> > >> > >> > On 29 September 2015 at 16:08, Diego Avesani <diego.aves...@gmail.com >> <javascript:_e(%7B%7D,'cvml','diego.aves...@gmail.com');>> wrote: >> > Dear Jeff, Dear all, >> > the code is very long, here something. I hope that this could help. >> > >> > What do you think? >> > >> > SUBROUTINE MATOPQN >> > USE VARS_COMMON,ONLY:COMM_CART,send_messageR,recv_messageL,nMsg >> > USE MPI >> > INTEGER :: send_request(nMsg), recv_request(nMsg) >> > INTEGER :: >> send_status_list(MPI_STATUS_SIZE,nMsg),recv_status_list(MPI_STATUS_SIZE,nMsg) >> > >> > !send message to right CPU >> > IF(MPIdata%rank.NE.MPIdata%nCPU-1)THEN >> > MsgLength = MPIdata%jmaxN >> > DO icount=1,MPIdata%jmaxN >> > iNode = MPIdata%nodeList2right(icount) >> > send_messageR(icount) = RIS_2(iNode) >> > ENDDO >> > >> > CALL MPI_ISEND(send_messageR, MsgLength, MPI_DOUBLE_COMPLEX, >> MPIdata%rank+1, MPIdata%rank+1, MPI_COMM_WORLD, >> send_request(MPIdata%rank+1), MPIdata%iErr) >> > >> > ENDIF >> > ! >> > >> > >> > !recive message FROM left CPU >> > IF(MPIdata%rank.NE.0)THEN >> > MsgLength = MPIdata%jmaxN >> > >> > CALL MPI_IRECV(recv_messageL, MsgLength, MPI_DOUBLE_COMPLEX, >> MPIdata%rank-1, MPIdata%rank, MPI_COMM_WORLD, recv_request(MPIdata%rank), >> MPIdata%iErr) >> > >> > write(*,*) MPIdata%rank-1 >> > ENDIF >> > ! >> > ! >> > CALL MPI_WAITALL(nMsg,send_request,send_status_list,MPIdata%iErr) >> > CALL MPI_WAITALL(nMsg,recv_request,recv_status_list,MPIdata%iErr) >> > >> > Diego >> > >> > >> > On 29 September 2015 at 00:15, Jeff Squyres (jsquyres) < >> jsquy...@cisco.com <javascript:_e(%7B%7D,'cvml','jsquy...@cisco.com');>> >> wrote: >> > Can you send a small reproducer program? >> > >> > > On Sep 28, 2015, at 4:45 PM, Diego Avesani <diego.aves...@gmail.com >> <javascript:_e(%7B%7D,'cvml','diego.aves...@gmail.com');>> wrote: >> > > >> > > Dear all, >> > > >> > > I have to use a send_request in a MPI_WAITALL. >> > > Here the strange things: >> > > >> > > If I use at the begging of the SUBROUTINE: >> > > >> > > INTEGER :: send_request(3), recv_request(3) >> > > >> > > I have no problem, but if I use >> > > >> > > USE COMONVARS,ONLY : nMsg >> > > with nMsg=3 >> > > >> > > and after that I declare >> > > >> > > INTEGER :: send_request(nMsg), recv_request(nMsg), I get the >> following error: >> > > >> > > [Lap] *** An error occurred in MPI_Waitall >> > > [Lap] *** reported by process [139726485585921,0] >> > > [Lap] *** on communicator MPI_COMM_WORLD >> > > [Lap] *** MPI_ERR_REQUEST: invalid request >> > > [Lap] *** MPI_ERRORS_ARE_FATAL (processes in this communicator will >> now abort, >> > > [Lap] *** and potentially your MPI job) >> > > forrtl: error (78): process killed (SIGTERM) >> > > >> > > Someone could please explain to me where I am wrong? >> > > >> > > Thanks >> > > >> > > Diego >> > > >> > > _______________________________________________ >> > > users mailing list >> > > us...@open-mpi.org >> <javascript:_e(%7B%7D,'cvml','us...@open-mpi.org');> >> > > Subscription: http://www.open-mpi.org/mailman/listinfo.cgi/users >> > > Link to this post: >> http://www.open-mpi.org/community/lists/users/2015/09/27703.php >> > >> > >> > -- >> > Jeff Squyres >> > jsquy...@cisco.com <javascript:_e(%7B%7D,'cvml','jsquy...@cisco.com');> >> > For corporate legal information go to: >> http://www.cisco.com/web/about/doing_business/legal/cri/ >> > >> > _______________________________________________ >> > users mailing list >> > us...@open-mpi.org <javascript:_e(%7B%7D,'cvml','us...@open-mpi.org');> >> > Subscription: http://www.open-mpi.org/mailman/listinfo.cgi/users >> > Link to this post: >> http://www.open-mpi.org/community/lists/users/2015/09/27704.php >> > >> > >> > >> > _______________________________________________ >> > users mailing list >> > us...@open-mpi.org <javascript:_e(%7B%7D,'cvml','us...@open-mpi.org');> >> > Subscription: http://www.open-mpi.org/mailman/listinfo.cgi/users >> > Link to this post: >> http://www.open-mpi.org/community/lists/users/2015/09/27710.php >> > >> > _______________________________________________ >> > users mailing list >> > us...@open-mpi.org <javascript:_e(%7B%7D,'cvml','us...@open-mpi.org');> >> > Subscription: http://www.open-mpi.org/mailman/listinfo.cgi/users >> > Link to this post: >> http://www.open-mpi.org/community/lists/users/2015/09/27721.php >> >> >> -- >> Jeff Squyres >> jsquy...@cisco.com <javascript:_e(%7B%7D,'cvml','jsquy...@cisco.com');> >> For corporate legal information go to: >> http://www.cisco.com/web/about/doing_business/legal/cri/ >> >> _______________________________________________ >> users mailing list >> us...@open-mpi.org <javascript:_e(%7B%7D,'cvml','us...@open-mpi.org');> >> Subscription: http://www.open-mpi.org/mailman/listinfo.cgi/users >> Link to this post: >> http://www.open-mpi.org/community/lists/users/2015/09/27727.php >> > >