Вход/Регистрация
Параллельное и распределенное программирование на С++
вернуться

Хьюз Камерон

Шрифт:

MPI_Comm_dup

( MPI_Comm CommIn, MPI_Comm *CommOut) ;

Дублирует уже существующий коммуникатор со всей его кашированной информацией

int

MPI_Comm_free

( MPI_Comm *Comm) ;

Отмечает объект коммуникатора как освобожденный

int

MPI_Comm_group

( MPI_Comm Comm, MPI_Group *Group);

Получает доступ к группе, связанной с заданным коммуникатором

int

MPI_Comm_size

( MPI_Comm Comm, int *Size);

Вычисляет и возвращает размер группы, связанной с заданным коммуникатором

int

MPI_Comm_split

(MPI_Comm Comm, int Color,int Key,MPI_Comm *CommOut) ;

Создает новые коммуникаторы на основе цветов и ключей

int

MPI_Comm_test_inter

( MPI_Comm Comm, int *Flag);

Определяет, является ли коммуникатор inter-коммуникатором

int

MPI_Comm_remote_group

( MPI_Comm Comm, MPI_Group *Group);

Получает доступ к удаленной группе, связанной с заданным inter-коммуникатором

int

MPI_Comm_remote_size

( MPI_Comm Comm, int *Size);

Вычисляет и возвращает размер удаленной

группы, связанной с заданным inter-

коммуникатором

Анатомия MPI-задачи

На рис.9.1 представлена каркасная MPI-программа. Задачи, выполняемые этой программой, просто сообщают свои ранги MPI-задаче с нулевым рангом. Каждая MPI-программа должна иметь по крайней мере функции MPI_Init и MPI_Finalize. Функция MPI_Init инициализирует MPI-среду для вызывающей задачи, а функция MPI_Finalize освобождает ресурсы этой MPI-задачи. Каждая MPI-задача должна вызвать функцию MPI_Finalize до своего завершения. Обратите вни м ание на обращения к функция м MPI_COMM_rank HMPI_COMM_Size . Они используются для получения значений ранга и количества процессов, которые принадлежат MPI-приложению. Эти функции вызываются большинством MPI-приложений. Вызов же остальных MPI-функций зависит от конкретного приложения. MPI-среда поддерживает более 300 функций (подробная информация представлена в соответствующей документации).

Рис. 9.1. MPI-программа

Использование шаблонных функций для представления MPI-задач

Шаблоны функции позволяют обоб щ ать процедуры для любо г о типа данных. Рассмотрим процедуру умножения, которая работает для любо г о типа данных (точнее, для типов данных, для которых операция умножения имеет смысл),

template<class T> T multiplies(T X, T Y) {

return( X * Y);

}

Для такой шаблонной функции, как эта, используются необходимые пара м етры дл я типа Т. Пара м етр T означает некоторый тип данных, который будет реально ***казан при реализации это г о шаблона. Так, мы можем реализовать функцию multiplies следую щ им образом.

//. . .

multiplies<double>(3.2,4.5);

multiplies<int>(7, 2) ; multiplies<rational>(«7/2»,«3/4»); //.. .

Здесь параметр T за м еняется типо м double, int и rational соответственно, определяя тем самым точную реализацию операции умножения. Умножение д ля разных типов данных опре д еляется по-разно м у. Это означает, что д ля разных типов данных выполняется различный код. Шаблоннал функция позволяет написать одну операцию у м ножения (в виде функции multiplies ) и при м енить ее ко м ноги м различны м типа м данных.

Реализация шаблонов и модельБРМО (типы данных)

Пара м етризованные функции м ожно использовать с MPI-интерфейсо м д ля обработки ситуаций, в которых все процессы выполняют одинаковый код, но работают с различны м и типа м и данных. Так, определив значение TaskRank процесса, м ы м о-жем распознать, с каки м и данны м и и данны м и какого типа должен работать процесс. В листинге 9.2 показано, как реализовать различные задачи д ля различных рангов.

  • Читать дальше
  • 1
  • ...
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: