[Mpi-forum] C++ types inaccessible after #281

Jeff Hammond jhammond at alcf.anl.gov
Tue Jun 26 09:06:33 CDT 2012


Maybe it makes sense to propose adding a C binding for a built-in
datatype that supports C++.  While the Forum clearly wants to kill C++
_bindings_, they insist that the C bindings are sufficient for C++,
meaning that they still intend to support C++ as a language.

There is no contradiction in adding support for C++ datatypes like
std::complex while at the same time killing the C++ bindings.  I think
that they are separate issues and that there is a strong case to be
made for adding an MPI datatype for C++ complex that works via the C
bindings.

Jeff

On Tue, Jun 26, 2012 at 12:02 AM, Jed Brown <jedbrown at mcs.anl.gov> wrote:
> I'm all for getting rid of the C++ bindings and see no compelling reason for
> anyone to use them.
>
> Predefined types are inconsequential to MPI-1 functionality, but they are
> special for one-sided, so availability of types is highly relevant to
> applications. This is a non-cosmetic change imposed by #281 that doesn't
> seem to have been discussed.
>
> On Jun 25, 2012 8:51 PM, "Fab Tillier" <ftillier at microsoft.com> wrote:
>>
>> Ah, thanks, sorry for being dense (I'm not familiar with the C++ bindings
>> as we don't ship them for MSMPI).
>>
>> Ticket 281 removes the entire C++ bindings from the standard, MPI::COMPLEX
>> included.  You'd need to convince your MPI library vendor to keep supplying
>> you with an MPI-2.2 compliant version of the C++ bindings (which is still
>> allowed by ticket #281).
>>
>> Hopefully someone with more experience with the C++ bindings can chime in,
>> but I'd expect the answer to your original question is yes, ticket #281
>> intentionally removes all C++ support from MPI-3.
>>
>> -Fab
>>
>> Jed Brown wrote on Mon, 25 Jun 2012 at 21:31:55
>>
>> > MPI::COMPLEX is not the same as MPI_C_COMPLEX (and the latter is not
>> > available on systems without C99).
>>
>> > On Jun 25, 2012 8:21 PM, "Fab Tillier" <ftillier at microsoft.com> wrote:
>> > Hi Jed,
>> >
>> > Maybe I'm not following you, but what predefined MPI datatype supports
>> > std::complex today?  My understanding is that there is no support for
>> > std::complex in MPI today, and that ticket 281 does not change this at
>> > all.
>> >
>> > Thanks,
>> > -Fab
>> >
>> > Jed Brown wrote on Mon, 25 Jun 2012 at 20:42:53
>> >
>> >> I see that std::complex will not be accessible in a predefined type if
>> >> #281 passes in its current form. Do you intend for there to be a
>> >> supported/recommended way for a C++ caller to get a complex predefined
>> >> (so that one-sided can be used) type? Note that C99 is not a subset of
>> >> any C++ and C99 complex cannot be used portably from C++ (even with
>> >> compiler suites that happen to support both).
>> >>
>> >> On Jun 25, 2012 7:07 PM, "Fab Tillier" <ftillier at microsoft.com
>> >> <mailto:ftillier at microsoft.com> > wrote: Hi Jed,
>> >>
>> >> Jed Brown wrote on Mon, 25 Jun 2012 at 16:43:54
>> >>
>> >>> Is it intended that #281 would make std::complex inaccessible? Should
>> >>> there be a MPI_CXX_COMPLEX, MPI_CXX_DOUBLE_COMPLEX,
>> >>> MPI_CXX_LONG_DOUBLE_COMPLEX, and (possibly) MPI_CXX_BOOL?
>> >>
>> >> I don't think ticket #281 does anything with respect to std::complex
>> >> accessibility.  The MPI standard defines the MPI_C_COMPLEX and family
>> >> as mapping to the C99 _Complex type (see Table 3.2, Predefined MPI
>> >> datatypes corresponding to C datatypes).  The standard is clear that
>> >> there are no corresponding C++ bindings.
>> >>
>> >>> Note that C99 complex is not a substitute because Microsoft does not
>> >>> implement it and it has different semantics regarding numerical
>> >>> stability. (Well, C99 semantics are specified and useful, std::complex
>> >>> stability is not specified by any C++ standard and in practice, is not
>> >>> implemented in a stable way.) This is not such a big deal for use with
>> >>> collectives because user-defined MPI_Ops can be used, but only
>> >>> predefined types can be used with one-sided operations, so presence of
>> >>> complex datatypes (or lack thereof) is relevant to applications.
>> >>
>> >> The fact that Microsoft does not support C99 is lame.  You can probably
>> >> get away using std::complex as a stand-in for C99 _Complex (but then
>> >> you're on your own), or move to a compiler that does (I believe the
>> >> Intel compiler supports C99 on Windows).
>> >>
>> >> -Fab
>> >>
>> >
>
>
> _______________________________________________
> mpi-forum mailing list
> mpi-forum at lists.mpi-forum.org
> http://lists.mpi-forum.org/mailman/listinfo.cgi/mpi-forum



-- 
Jeff Hammond
Argonne Leadership Computing Facility
University of Chicago Computation Institute
jhammond at alcf.anl.gov / (630) 252-5381
http://www.linkedin.com/in/jeffhammond
https://wiki.alcf.anl.gov/parts/index.php/User:Jhammond




More information about the mpi-forum mailing list