As an FYI the code runs just fine using OMPI 1.2.x - it is only 1.3.x where the problem arises.
So it is definitely something that changed in the 1.3 series O On Thu, Apr 30, 2009 at 12:36 PM, Brian W. Barrett <brbar...@open-mpi.org>wrote: > When we added the CM PML, we added a pml_max_contextid field to the PML > structure, which is the max size cid the PML can handle (because the > matching interfaces don't allow 32 bits to be used for the cid. At the same > time, the max cid for OB1 was shrunk significantly, so that the header on a > short message would be packed tightly with no alignment padding. > > At the time, we believed 32k simultaneous communicators was plenty, and > that CIDs were reused (we checked, I'm pretty sure). It sounds like someone > removed the CID reuse code, which seems rather bad to me. There have to be > unused CIDs in Ralph's example - is there a way to fallback out of the block > algorithm when it can't find a new CID and find one it can reuse? Other > than setting the multi-threaded case back on, that is? > > Brian > > > On Thu, 30 Apr 2009, Edgar Gabriel wrote: > > cid's are in fact not recycled in the block algorithm. The problem is that >> comm_free is not collective, so you can not make any assumptions whether >> other procs have also released that communicator. >> >> >> But nevertheless, a cid in the communicator structure is a uint32_t, so it >> should not hit the 16k limit there yet. this is not new, so if there is a >> discrepancy between what the comm structure assumes that a cid is and what >> the pml assumes, than this was in the code since the very first days of Open >> MPI... >> >> Thanks >> Edgar >> >> Brian W. Barrett wrote: >> >>> On Thu, 30 Apr 2009, Ralph Castain wrote: >>> >>> We seem to have hit a problem here - it looks like we are seeing a >>>> built-in limit on the number of communicators one can create in a >>>> program. The program basically does a loop, calling MPI_Comm_split each >>>> time through the loop to create a sub-communicator, does a reduce >>>> operation on the members of the sub-communicator, and then calls >>>> MPI_Comm_free to release it (this is a minimized reproducer for the real >>>> code). After 64k times through the loop, the program fails. >>>> >>>> This looks remarkably like a 16-bit index that hits a max value and then >>>> blocks. >>>> >>>> I have looked at the communicator code, but I don't immediately see such >>>> a field. Is anyone aware of some other place where we would have a limit >>>> that would cause this problem? >>>> >>> >>> There's a maximum of 32768 communicator ids when using OB1 (each PML can >>> set the max contextid, although the communicator code is the part that >>> actually assigns a cid). Assuming that comm_free is actually properly >>> called, there should be plenty of cids available for that pattern. However, >>> I'm not sure I understand the block algorithm someone added to cid >>> allocation - I'd have to guess that there's something funny with that >>> routine and cids aren't being recycled properly. >>> >>> Brian >>> _______________________________________________ >>> devel mailing list >>> de...@open-mpi.org >>> http://www.open-mpi.org/mailman/listinfo.cgi/devel >>> >> >> >> _______________________________________________ > devel mailing list > de...@open-mpi.org > http://www.open-mpi.org/mailman/listinfo.cgi/devel >