Шрифт:
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 показано, как реализовать различные задачи д ля различных рангов.