Do you have some suggestions? Is there any possibilities to use not a
vector as send_request and at the same time to have a WAIT?

regarding the code, you are perfectly right, I hope to improve in future

Thanks again

Diego


On 30 September 2015 at 16:50, Jeff Squyres (jsquyres) <jsquy...@cisco.com>
wrote:

> I don't think that this pattern was obvious from the code snippet you
> sent, which is why I asked for a small, self-contained reproducer.  :-)
>
> I don't know offhand how send_request(:) will be passed to C.
>
>
> > On Sep 30, 2015, at 10:16 AM, 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> 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>
> 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
> > >
> > > _______________________________________________
> > > 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/27721.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/27727.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/27732.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/27738.php
>

Reply via email to