- •Основні операції мрі-бібліотеки, розробка простої мрі-програми
- •Введение в mpi
- •Что такое mpi
- •Понятие параллельной программы
- •Операции передачи данных
- •Понятие коммуникаторов
- •Типы данных
- •Виртуальные топологии
- •Базовые функции mpi
- •Определение количества и ранга процессов
- •Определение времени выполнение mpi-программы
Операции передачи данных
Основу MPI составляют операции передачи сообщений. Среди предусмотренных в составе MPI функций различаются парные (point-to-point) операции между двумя процессами и коллективные (collective) коммуникационные действия для одновременного взаимодействия нескольких процессов.
Для выполнения парных операций могут использоваться разные режимы передачи, среди которых синхронный, блокирующий и др.
Понятие коммуникаторов
Процессы параллельной программы объединяются в группы. Другим важным понятием MPI, описывающим набор процессов, является понятие коммуникатора. Под коммуникатором в MPI понимается специально создаваемый служебный объект, который объединяет в своем составе группу процессов.
Парные операции передачи данных выполняются только для процессов, принадлежащих одному и тому же коммуникатору. Коллективные операции применяются одновременно для всех процессов одного коммуникатора. Как результат, указание используемого коммуникатора является обязательным для операций передачи данных в MPI.
В ходе вычислений могут создаваться новые и удаляться существующие группы процессов и коммуникаторы. Один и тот же процесс может принадлежать разным группам и коммуникаторам.
Все имеющиеся в параллельной программе процессы (рис. 4.2) входят в состав конструируемого по умолчанию коммуникатора с идентификатором MPI_COMM_WORLD.
Рис 4.2 Предопределенный коммуникатор MPI_COMM_WORLD для семи процессов
Типы данных
При выполнении операций передачи сообщений для указания передаваемых или получаемых данных в функциях MPI необходимо указывать тип пересылаемых данных. MPI содержит большой набор базовых типов данных, во многом совпадающих с типами данных в алгоритмических языках C и Fortran. Кроме того, в MPI имеются возможности создания новых производных типов данных для более точного и краткого описания содержимого пересылаемых сообщений.
Основные типы данных в MPI, соответствующие типам данных в С, приведены в таблице 4.1.
Таблица 4.1 Базовые (предопределенные) типы данных MPI для алгоритмического языка С
Тип данных MPI |
Тип данных С |
MPI_CHAR |
signed char |
MPI_SHORT |
signed short int |
MPI_INT |
signed int |
MPI_LONG |
signed long int |
MPI_UNSIGNED_CHAR |
unsigned char |
MPI_UNSIGNED_SHORT |
unsigned short int |
MPI_UNSIGNED |
unsigned int |
MPI_UNSIGNED_LONG |
unsigned long int |
MPI_FLOAT |
float |
MPI_DOUBLE |
double |
MPI_LONG_DOUBLE |
long double |
MPI_BYTE |
|
MPI_PACKED |
|
Следует знать, что тип данных, определённых для приёма, должен совпадать с типом отправляемых данных. Большим преимуществом этого является то, что MPI может поддерживать неоднородные (гетерогенные) параллельные архитектуры, то есть параллельные машины, построенные из различных процессоров, поэтому в случае необходимости может применяться преобразование типов.
Комплексные типы данных могут быть созданы во время выполнения программы. Такие типы данных называются производными типами данных и образуются из основных типов данных. Они могут использоваться для передачи больших векторов, структур С и т. д. Типы данных MPI MPI_BYTE и MPI_PACKED не соответствуют ни одному из типов данных ни в С ни в Fortran. MPI_BYTE используется для представления восьми двоичных чисел, а MPI_PACKED предназначен для упаковки данных.
