Категории
Самые читаемые
Лучшие книги » Компьютеры и Интернет » Прочая околокомпьтерная литература » Параллельное и распределенное программирование на С++ - Хьюз Камерон

Параллельное и распределенное программирование на С++ - Хьюз Камерон

Читать онлайн Параллельное и распределенное программирование на С++ - Хьюз Камерон

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 87 88 89 90 91 92 93 94 95 ... 181
Перейти на страницу:

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

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

//Листинг 9.2. Использование шаблонных функций для //   определения «фронта работ» МР1-задач

int main(int argc, char *argv[]) {

//.. .

int Tag = 2; int WorldSize; int TaskRank; MPI_Status Status; MPI_Init(&argc,&argv) ,-

MPI_Comm_rank (MPI_COMM_WORLD, &TaskRank) ; MPI_Comm_size (MPI_COMM_WORLD, &WorldSize) ; //.. .

switch(TaskRank) {

case 1: multiplies<double>(3.2,4.6); break;

case 2: multiplies<complex>(X,Y)

break; //case n:

//.. .

}

}

Поскольку не существует двух задач с одинаковым ранго м, все ветви в инструкции case листинга 9.2 будут выполнены различны м и MPI-задача м и. Кро м е того, такой тип параметризации м ожно распространить на контейнерные аргу м енты шаблонных функций. Это позволит передавать одной и той же шаблонной функции различные контейнеры объектов, содержащие различные типы объектов. Напри м ер, в листинге 9.3 показана обоб щ енная шаблоннал функция search ().

// Листинг 9.3. Использование контейнерных шаблонов в //   качестве аргументов шаблонных функций

template<T> bool search(T Key, graph<T>) {

//. . -

locate(Key) //. . .

}

// . . .

MPI_Comm_rank(MPI_COMM_WORLD, &TaskRank); // . . .

switch(TaskRank) {

case 1: {

graph<string> bullion;

search<string> search(«gold», bullion);

}

break; case 2: {

graph<complex> Coordinates; search<complex>((X,Y),Coordinates);

}

break;

//. . .

В листин г е 9.3 процесс, у которого TaskRank = 1, выполняет поиск в графе (graph) сименем bullion, содержа щ е м string<^beKTbi, а процесс, у которого TaskRank = 2, выполняет поиск в графе Coordinates, содержа щ е м ко м плексные числа. Мы не должны из м енять функцию search (), чтобы приспособиться к други м дан н ы м или типам данных, да и MPI-програм м а в это м случае и м еет более простую структуру, поскольку м ы м оже м м ногократно использовать шаблонную функцию поиска (search) для прос м отра контейнера graph, содержа щ его данные любого типа. Использование шаблонов значительно упро щ ает 5РМГ>програ мм ирование. Че м более об щ ей м ы делае м MPI-задачу, те м более гибкой она становится. Кро м е того, если некоторый шаблон прошел этап отладки и тестирования, надежность всех построенных на его основе МР1-задач м ожно считать довольно высокой, поскольку все они выполняют одинаковый код.

Использование полиморфизмадля реализации MPMD-модели

1 ... 87 88 89 90 91 92 93 94 95 ... 181
Перейти на страницу:
На этой странице вы можете бесплатно скачать Параллельное и распределенное программирование на С++ - Хьюз Камерон торрент бесплатно.
Комментарии