3.3 Основные понятия и определения

Понятие коммуникатора

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

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

В ходе вычислений могут создаваться новые и удаляться существующие группы процессов и коммуникаторы. Один и тот же процесс может принадлежать разным группам и коммуникаторам. Все имеющиеся в параллельной программе процессы входят в состав создаваемого по умолчанию коммуникатора с идентификатором MPI_COMM_WORLD. Этот коммуникатор существует всегда и служит для взаимодействия всех запущенных процессов MPI – программы. Кроме него при старте программы имеется коммуникатор MPI_COMM_SELF, содержащий только один текущий процесс, а также коммуникатор MPI_COMM_NULL, не содержащий ни одного процесса.

Типы данных

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




Тип MPI Тип языка C


MPI_BYTE


MPI_CHAR signed char


MPI_DOUBLE double


MPI_FLOAT float


MPI_INT int


MPI_LONG long


MPI_LONG_DOUBLE long double


MPI_PACKED


MPI_SHORT short


MPI_UNSIGNED_CHAR unsigned char


MPI_UNSIGNED unsigned int


MPI_UNSIGNED_LONG unsigned long


MPI_UNSIGNED_SHORT unsigned short



Таблица 3.1: Соответствие между MPI - типами и типами языка C

В таблице 3.1 перечислен обязательный минимум поддерживаемых стандартных типов, однако, если в базовой системе представлены и другие типы, то их поддержку будет осуществлять и MPI, например, если в системе есть поддержка комплексных переменных двойной точности DOUBLE COMPLEX, то будет присутствовать тип MPI_DOUBLE_COMPLEX. Типы MPI_BYTE и MPI_PACKED используются для передачи двоичной информации без какого-либо преобразования. Кроме того, в MPI имеются возможности для создания новых производных типов данных для более точного и краткого описания содержимого пересылаемых сообщений.

Операции передачи данных

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

Среди предусмотренных в составе MPI функций различаются парные (point-to-point) операции между двумя процессами и коллективные (collective) коммуникационные действия для одновременного взаимодействия нескольких процессов.

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