Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Processes - Metodicka (edited) with MPI - last....doc
Скачиваний:
86
Добавлен:
22.12.2018
Размер:
2 Мб
Скачать
☆
      1. Функции общего назначения. Общая структура программы.

Все без исключения функции Си-библиотеки MPI возвращают целое значение, описывающее код завершения операции. Существует специальная константа MPI_SUCCESS, соответствующая успешному завершению функции. В случае неудачного завершения возвращаемое значение будет отлично от MPI_SUCCESS, и равно одному из кодов ошибок, определенных в MPI и описывающих различные исключительные ситуации.

Все типы данных, константы и функции, относящиеся к Си-библиотеке MPI, описаны в заголовочном файле <mpi.h>.

Коммуникаторы и группы.

Важными понятиями MPI являются группы ветвей и коммуникаторы. Группа ветвей представляет собой упорядоченное множество ветвей. Каждой ветви в группе назначается уникальный порядковый номер – целое число в диапазоне [0, N-1], где N – количество ветвей в группе.

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

С каждой группой ветвей MPI связан так называемый «коммуникационный контекст», или «коммуникационное поле», задающее множество всех возможных участников операций обмена данными и уникальным образом описывающее каждого участника. Кроме того, коммуникационный контекст может использоваться для хранения некоторых общих для всех ветвей данной группы данных. Для описания коммуникационного контекста в MPI служат объекты специального типа – коммуникаторы. Коммуникатор, или описатель коммуникационного контекста, присутствует в качестве параметра во всех вызовах MPI, связанных с обменом данными. Подчеркнем, что любая операция обмена данными может быть осуществлена только внутри определенного коммуникационного контекста, поэтому, например, сообщение, отправленное с помощью какого-либо коммуникатора, может быть получено только с помощью этого же самого коммуникатора.

Коммуникаторы MPI описываются специальным типом данных MPI_Comm. При запуске приложения сразу после инициализации среды выполнения MPI каждой ветви становятся доступны два предопределенных коммуникатора, обозначаемых константами MPI_COMM_WORLD и MPI_COMM_SELF. MPI_COMM_WORLD представляет собой коммуникатор, описывающий коммуникационный контекст начальной группы ветвей, т.е. всех ветвей, порожденных при запуске приложения. MPI_COMM_SELF – это коммуникатор, включающий одну-единственную ветвь – текущую, и соответственно, для каждой ветви он будет иметь свое значение.

Каждая ветвь приложения имеет возможность узнать общее количество ветвей в своей группе и свой собственный уникальный номер в ней. Для этого служат функции MPI_Comm_size() и MPI_Comm_rank():

#include <mpi.h>

int MPI_Comm_size(MPI_Comm comm, int *size);

int MPI_Comm_rank(MPI_Comm comm, int *rank);

В первом параметре каждой из этих функций передается коммуникатор, описывающий коммуникационный контекст интересующей группы ветвей, во втором – указатель на целочисленную переменную, в которую будет записан результат: для функции MPI_Comm_size() – количество ветвей в группе; для функции MPI_Comm_rank() – уникальный номер текущей ветви в группе.

Отметим, что в MPI предусмотрена также возможность обмена сообщениями между ветвями, принадлежащими разным группам. Для этого существует возможность создать так называемый интер-коммуникатор, объединяющий коммуникационные контексты, заданные двумя различными коммуникаторами, каждый из которых описывает коммуникационный контекст некоторой группы. После создания такого коммуникатора его можно использовать для организации обмена данными между ветвями этих групп.