10.1.4. Class Member Functions for MPI


Up: C++ Next: Semantics Previous: C++ Classes for MPI

Besides the member functions which constitute the C++ language bindings for MPI, the C++ language interface has additional functions (as required by the C++ language). In particular, the C++ language interface must provide a constructor and destructor, an assignment operator, and comparison operators.

The complete set of C++ language bindings for MPI-1 is presented in Annex MPI-1 C++ Language Binding . The bindings take advantage of some important C++ features, such as references and const. Declarations (which apply to all MPI member classes) for construction, destruction, copying, assignment, comparison, and mixed-language operability are also provided. To maintain consistency with what has gone before, the binding definitions are given in the same order as given for the C bindings in [6].

Except where indicated, all non-static member functions (except for constructors and the assignment operator) of MPI member classes are virtual functions.


[] Rationale.

Providing virtual member functions is an important part of design for inheritance. Virtual functions can be bound at run-time, which allows users of libraries to re-define the behavior of objects already contained in a library. There is a small performance penalty that must be paid (the virtual function must be looked up before it can be called). However, users concerned about this performance penalty can force compile-time function binding. ( End of rationale.)

Example Example showing a derived MPI class.

class foo_comm : public MPI::Intracomm { 
public: 
  void Send(void* buf, int count, const MPI::Datatype& type,  
            int dest, int tag) const  
  { 
    // Class library functionality 
    MPI::Intracomm::Send(buf, count, type, dest, tag); 
    // More class library functionality 
  } 
}; 


[] Advice to implementors.

Implementors must be careful to avoid unintended side effects from class libraries that use inheritance, especially in layered implementations. For example, if MPI_BCAST is implemented by repeated calls to MPI_SEND or MPI_RECV, the behavior of MPI_BCAST cannot be changed by derived communicator classes that might redefine MPI_SEND or MPI_RECV. The implementation of MPI_BCAST must explicitly use the MPI_SEND (or MPI_RECV) of the base MPI::Comm class. ( End of advice to implementors.)



Up: C++ Next: Semantics Previous: C++ Classes for MPI


Return to MPI-2 Standard Index

MPI-2.0 of July 18, 1997
HTML Generated on August 11, 1997