304. 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 is presented in Annex C++ Bindings (deprecated) . 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.

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(const 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.2 Standard Index
Return to MPI Forum Home Page

(Unofficial) MPI-2.2 of September 4, 2009
HTML Generated on September 10, 2009