>From my understanding of the Open MPI code, it uses negative tags to implement 
>collective operations and one-sided communication only. Your code might work 
>if you use neither of them but will not be portable, not only across MPI 
>implementations, but also some future change in Open MPI might break it.

Just my €0.02.

Kind regards,
Hristo Iliev
--
Hristo Iliev, Ph.D. -- High Performance Computing
RWTH Aachen University, Center for Computing and Communication
Rechen- und Kommunikationszentrum der RWTH Aachen
Seffenter Weg 23,  D 52074  Aachen (Germany)


> -----Original Message-----
> From: users-boun...@open-mpi.org [mailto:users-boun...@open-mpi.org]
> On Behalf Of Sébastien Boisvert
> Sent: Friday, September 28, 2012 3:09 PM
> To: us...@open-mpi.org
> Subject: Re: [OMPI users] About MPI_TAG_UB
> 
> Hello,
> 
> My application has 191 MPI tags allocated with allocateMessageTagHandle,
> so
> 7 bits is not enough.
> 
> Indeed, tags can be valued from 0 to 2147483647 inclusively with this
> MPI_TAG_UB value in Open-MPI. I misused the returned pointer.
> 
> In Open-MPI, MPI_ANY_TAG is -1. I removed the boundary check in
> MPI_Isend and MPI_Recv to allow values from -2147483648 to 2147483647
> inclusively.
> 
>   https://raw.github.com/sebhtml/patches/master/ompi-1.6.2-ray-4096-
> routing.patch
> 
> As long as my tag is not MPI_ANY_TAG, I guess it should work fine although it
> is not MPI-compliant. I will test that.
> 
> On 28/09/12 03:50 AM, Iliev, Hristo wrote:
> > Hello,
> >
> > MPI_TAG_UB in Open MPI is INT_MAX == 2^31-1 == 2147483647. The value
> > of
> > 17438272 (0x10A1640) is a bit strange for MPI_TAG_UB. I would rather
> > say that it is the value of a pointer to someplace in the heap, i.e.
> > you have missed the fact that the attribute value as returned by
> > MPI_Comm_get_attr / MPI_Attr_get is a pointer to the actual value (for
> > MPI_TAG_UB it is a pointer to int).
> >
> > MPI_TAG_UB is predefined attribute and according to §8.1.2 of the MPI
> > standard its value cannot be changed by the user.
> >
> > You have to find another solution, e.g. reduce the tag space to 7 bits
> > or put the routing info inside the message payload.
> >
> > Best regards,
> > Hristo Iliev
> > --
> > Hristo Iliev, Ph.D. -- High Performance Computing RWTH Aachen
> > University, Center for Computing and Communication
> > Rechen- und Kommunikationszentrum der RWTH Aachen Seffenter Weg
> 23,  D
> > 52074  Aachen (Germany)
> >
> >> -----Original Message-----
> >> From: users-boun...@open-mpi.org [mailto:users-bounces@open-
> mpi.org]
> >> On Behalf Of Sébastien Boisvert
> >> Sent: Friday, September 28, 2012 1:22 AM
> >> To: us...@open-mpi.org
> >> Subject: [OMPI users] About MPI_TAG_UB
> >>
> >> Hello,
> >>
> >> I am running Ray (a distributed software in genomics) with Open-MPI
> >> on
> >> 2048 processes and everything runs fine. Ray has a any-to-any
> >> communication pattern.
> >> To avoid using too much memory, I implemented a virtual message
> router.
> >>
> >> Without the virtual message router, I get messages like these:
> >>
> >>
> [cp2558][[30209,1],0][connect/btl_openib_connect_oob.c:490:qp_create_
> >> o ne] error creating qp errno says Cannot allocate memory
> >>
> >> We did some tests on the Cray XE6 on 4096 processing elements (4096
> >> MPI
> >> ranks) without the virtual message router and everything runs fine as is.
> > So
> >> using the virtual message router is not required.
> >>
> >> The real message tag, the real source and the real destination are
> >> stored
> > in
> >> the MPI tag. I know, this is ugly, but it works. I can not store this
> > information
> >> in the message buffer because the buffer can be NULL.
> >>
> >> bits 0 to 7: tag (8 bits, values from 0 to 255, 256 possible values)
> >> bits
> > 8 to 19:
> >> true source (12 bits, values from 0 to 4095, 4096 possible values)
> >> bits 20
> > to 31:
> >> true destination (12 bits, values from 0 to 4095, 4096 possible
> >> values)
> >>
> >> Without the virtual router, my code is compliant with the fact that
> >> MPI_Comm_get_attr(MPI_COMM_WORLD, MPI_TAG_UB,...) is at least
> >> 32767 (my tags are <= 255).
> >>
> >>
> >> When I try jobs with 4096 processes with the virtual message router,
> >> I get
> > the
> >> error:
> >>
> >>     MPI_ERR_TAG: invalid tag.
> >>
> >> Without the virtual message router I get:
> >>
> >>
> [cp2558][[30209,1],0][connect/btl_openib_connect_oob.c:490:qp_create_
> >> o ne] error creating qp errno says Cannot allocate memory
> >>
> >> With Open-MPI 1.5.4, the upper bound is 17438272 (at least in our build).
> >> That explains MPI_ERR_TAG.
> >>
> >>
> >> My 2 questions:
> >>
> >> 1. Is there a better way to store routing information ?
> >>
> >> 2. Can I create my own communicator and set its MPI_TAG_UB to
> >> whatever I want ?
> >>
> >>
> >> Thanks !
> >>
> >> ***
> >> Sébastien Boisvert
> >> Ph.D. student
> >> http://boisvert.info/
> >> _______________________________________________
> >> users mailing list
> >> us...@open-mpi.org
> >> http://www.open-mpi.org/mailman/listinfo.cgi/users
> 
> _______________________________________________
> users mailing list
> us...@open-mpi.org
> http://www.open-mpi.org/mailman/listinfo.cgi/users

Attachment: smime.p7s
Description: S/MIME cryptographic signature

Reply via email to