On Dec 17, 2014, at 9:52 PM, George Bosilca <bosi...@icl.utk.edu> wrote:
>> I don't understand how MPIX_<something> is better. >> >> Given that there is *zero* commonality between any MPI extension implemented >> between MPI implementations, how exactly is having the same prefix any less >> confusing? > > This is an overstatement. There were quite a few examples over the last few > years (PERUSE, libNBC, ULFM). They all took different approaches for the > naming of their functions, increasing the potential users confusion. As a > developer for one of these MPI extensions I would rather go with a unique > naming scheme to free our users from the hassle of the name checking. PERUSE and libNBC were both exposed through actual MPI functions -- not extensions. If you put ULFM in ompi/mpiext, we don't have a strict policy on the exposed extension symbols, that's true. But FWIW, the existing ones that are in the OMPI github tree are all OMPI_* symbols. All this being said, if your *real* complaint is that you want the same prefixes for ULFM between OMPI and MPICH, then great -- use MPIX in both. That's an entirely different case than what I have been talking about because you *do* have the same functions/behavior in multiple MPI implementations. My point is that if we have OMPI-specific extensions (which most likely will be), then having an OMPI_ prefix is a Good Thing because it clearly identifies them as belonging to OMPI, not other MPI implementations. >> My point is that using an extension is inherently non-portable. The chances >> for <something> to collide between different MPI implementations is actually >> quite high. Indeed, if everyone uses MPIX_<something>, then there's a very >> real possibility that MPIX_Foo != MPIX_Foo != MPIX_Foo. That's *horrible*. > > Horrible sure, but highly improbable (function names have a meaning) I think we're being being subjective here -- there's no real way to quantify this. We might have to agree to disagree on this point. One real place that MPI implementations may collide on extension names are symbols for upcoming/new functions (e.g., MPI-4 functions). MPICH, for example, put the NBCs in as MPIX_Ibarrier (etc.) before MPI-3 was formally passed. OMPI, however, just put those functions in as MPI_Ibarrier() -- we never marked them as MPIX. I.e., we wanted until the NBCs were formally voted in and then put them in as their final names. The rationale for this approach so that a) we waited until it was pretty certain that these functions were final final final, and b) people could start using the functions immediately without having to worry about whether they are named MPIX_foo or MPI_foo. If OMPI continues this policy, then OMPI/MPICH won't collide on these names. >> ----- >> #if defined(OPEN_MPI) && OPEN_MPI >> OMPI_Foo(a,b,c); >> #endif >> >> ... >> >> #if defined(MPICH) && MPICH >> MPIX_Foo(f,e,d,c,b,a); >> #endif >> ----- > > This is horrible! This is the kind of solution that neither a developer or a > user of such an extension would promote. Er... regardless of whether the OMPI extension begins with MPIX_ or OMPI_, how does that change the above code pattern? Extensions are *always* potentially non-portable. >> I guess my fundamental question is: why impose commonality of names where >> there is no commonality of function signature and behavior? > > The overarching goal of an MPI extension is to show the interest of the > approach and eventually become part of the standard. I guess we disagree there. There's been 2 OMPI extensions that have existed for several releases that have no intention of ever going into the standard. > A well designed extension will have a unique function signature and behavior, > not only across different implementations but across different versions. ...er... by definition, any given implementation cannot guarantee that. -- Jeff Squyres jsquy...@cisco.com For corporate legal information go to: http://www.cisco.com/web/about/doing_business/legal/cri/