next up previous contents
Next: Семантика. Up: С++ Previous: Классы С++ для MPI   Contents

Функции-члены классов для MPI

Кроме членов-функций, соответствующих привязке С++ к MPI, интерфейс языка С++ имеет дополнительные функции (требуемые самим языком С++). В частности, интерфейс С++ должен предоставлять конструктор, деструктор, операторы присваивания и сравнения.

Привязки используют преимущества некоторых важных особенностей С++, таких как ссылка и директива const. Предоставляются также объявления (которые подходят ко всем классам MPI) для создания, удаления, копирования, присваивания, сравнения и смешанной работы языков.

Везде, кроме отмеченных мест, все не-статические функции-члены классов MPI (кроме конструкторов и оператора присваивания) - виртуальные функции.

Объяснение: Предоставление виртуальных функций-членов - важная часть структуры для наследования. Виртуальные функции могут быть связаны во время выполнения, что позволяет пользователям библиотек переопределить поведение объектов, уже содержащихся в библиотеке. Это вызывает небольшую потерю производительности, так как функция перед вызовом должна быть найдена. Впрочем, пользователи, заботящиеся о производительности, могут включить принудительную связку функций во время компиляции. []

Пример 8.1 - порожденный класс MPI class foo_comm : public MPI::Intracomm { public: void Send(const void* buf, int count,const MPI::Datatype& type, int dest, int tag) const { // функциональность класса MPI::Intracomm::Send(buf, count, type, dest, tag); // дальнейшая функциональность класса } };

Совет разработчикам: Разработчики должны соблюдать осторожность, избегая непредусмотренных побочных эффектов со стороны библиотек классов, использующих наследование, особенно многоуровневые реализации. Например, если MPI_BCAST реализован повторным вызовами MPI_SEND или MPI_RECV, поведение MPI_BCAST не может быть изменено порожденным классом коммуникатора, который мог переопределить MPI_SEND или MPI_RECV. Реализация MPI_BCAST должна явно использовать MPI_SEND (или MPI_RECV) базового класса MPI::Comm. []



Alex Otwagin 2002-12-10