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
>>
>
>

Reply via email to