[mpi-22] Proposal: C++ MPI constructors

Jeff Squyres jsquyres at [hidden]
Fri Jan 18 14:07:08 CST 2008



Per http://www.cs.uiuc.edu/homes/wgropp/projects/parallel/MPI/mpi-errata/ 
, the errata item entitled "C++ constructors for MPI objects".

Mail discussing: http://www.cs.uiuc.edu/homes/wgropp/projects/parallel/MPI/mpi-errata/discuss/C++objs/

Proposal:

MPI-2, page 350, before line 37, add

// MPI::Op::Init is deprecated

MPI-2, page 350, after line 37, add

Op Op::Create(User_function* function, bool commute);

--> In MPI-2.2, if the C++ bindings for MPI-1 functions (like  
MPI_OP_CREATE) are put in the rest of the document, MPI::Op::Init  
should be marked as deprecated.

Rationale:

I'm actually reversing my position from the April 2000 e-mail; the  
path of least resistance is to make MPI::Op be the same as all other  
MPI classes, even if it is awkward.

Specifically, if we *really* wanted to do it right, the C++ bindings  
for various MPI_*_CREATE functions should be overloaded C++  
constructors (e.g.,
MPI::Op::Op(User_function* function, bool commute),
MPI::Intracomm::Intracomm(const Group& group), etc.) so that you could  
do things like this:

   MPI::Op op(user_function, true);
   MPI::Intracomm(group);

But I think that's too much for MPI-2.2.  Perhaps for MPI-3 (if anyone  
cares).  Note that such constructors would only be syntactic sugar  
since the same functionality can be obtained in the current MPI C++  
API, but the current functionality feels slightly "unnatural" to C++.

Note that this is an MPI-2.2 proposal.


-- 
Jeff Squyres
Cisco Systems




More information about the Mpi-22 mailing list