I totally agree. Portability is the most important thing for me. That's why the virtual router is not required to run the software.
On 28/09/12 10:32 AM, Iliev, Hristo wrote: >>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