Diego, if you invoke 3 times Isend with three different send__request() and sane thing for Irecv, then you do not have to worry about MPI_REQUEST_NULL
Based on your snippet, there could be an issue on ranks 0 and n-1, also the index of send_request is MPIdata%rank+1 if MPIdata%rank is MPi_Comm_rank, that makes no sense to me, and your indexes should likely be hard coded from 1 to 3 Cheers, Gilles On Wednesday, September 30, 2015, 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> 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> >> 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> >>> 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> wrote: >>>> >>>>> Can you send a small reproducer program? >>>>> >>>>> > On Sep 28, 2015, at 4:45 PM, Diego Avesani <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 >>>>> > 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 >>>>> For corporate legal information go to: >>>>> http://www.cisco.com/web/about/doing_business/legal/cri/ >>>>> >>>>> _______________________________________________ >>>>> users mailing list >>>>> 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 >> 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 >> > >