Понятие параллельной программы
Под параллельной программой в
рамках MPI понимается
множество одновременно выполняемых процессов. Процессы могут выполняться на
разных процессорах, но на одном процессоре могут располагаться и несколько
процессов (в этом случае их исполнение осуществляется в режиме разделения
времени). В предельном случае для выполнения параллельной программы может
использоваться один процессор – как правило, такой способ применяется для
начальной проверки правильности параллельной программы.
Каждый процесс параллельной программы порождается на основе копии одного
и того же программного кода (модель
SPMP). Данный программный код,
представленный в виде исполняемой программы, должен быть доступен в момент
запуска параллельной программы на всех используемых процессорах. Исходный
программный код для исполняемой программы разрабатывается на алгоритмических
языках C или Fortran с использованием той
или иной реализации библиотеки MPI.
Количество процессов и число используемых процессоров определяется в
момент запуска параллельной программы средствами среды исполнения MPI-программ и в ходе
вычислений меняться не может. Все процессы программы последовательно
перенумерованы от 0 до np-1, где np есть общее количество процессов. Номер процесса
именуется рангом процесса.
Операции передачи данных
Основу MPI
составляют операции передачи сообщений. Среди предусмотренных в составе MPI функций различаются парные (point-to-point) операции между двумя
процессами и коллективные (collective) коммуникационные
действия для одновременного взаимодействия нескольких процессов.
Для выполнения парных операций могут использоваться разные режимы передачи
, среди
которых синхронный, блокирующий и др.
Как уже отмечалось ранее, стандарт MPI предусматривает
необходимость реализации большинства основных коллективных операций передачи
данных.
Понятие коммуникаторов
Процессы
параллельной программы объединяются в группы. Под коммуникатором в MPI понимается специально создаваемый
служебный объект, объединяющий в своем составе группу процессов и ряд
дополнительных параметров (контекст),
используемых при выполнении операций передачи данных.
Как правило, парные
операции передачи данных выполняются для процессов, принадлежащих одному и тому
же коммуникатору. Коллективные операции применяются одновременно для всех
процессов коммуникатора. Как результат, указание используемого коммуникатора
является обязательным для операций передачи данных в MPI.
В ходе вычислений
могут создаваться новые и удаляться существующие группы процессов и
коммуникаторы. Один и тот же процесс может принадлежать разным группам и
коммуникаторам. Все имеющиеся в параллельной программе процессы входят в состав
создаваемого по умолчанию коммуникатора с идентификатором MPI_COMM_WORLD.
При необходимости
передачи данных между процессами из разных групп необходимо создавать глобальный
коммуникатор (intercommunicator).
Типы данных
При выполнении
операций передачи сообщений для указания передаваемых или получаемых данных в
функциях MPI необходимо
указывать тип пересылаемых данных.
MPI содержит большой
набор базовых типов данных, во многом
совпадающих с типами данных в алгоритмических языках C и Fortran. Кроме того, в MPI имеются возможности для создания
новых производных типов данных для
более точного и краткого описания содержимого пересылаемых сообщений.
Виртуальные топологии
Как уже отмечалось
ранее, парные операции передачи данных могут быть выполнены между любыми
процессами одного и того же коммуникатора, а в коллективной операции принимают
участие все процессы коммуникатора. В этом плане, логическая топология линий
связи между процессами имеет структуру полного графа (независимо от наличия
реальных физических каналов связи между процессорами).
Вместе с этим, для изложения и последующего анализа ряда
параллельных алгоритмов целесообразно логическое представление имеющейся
коммуникационной сети в виде тех или иных топологий.
В MPI имеется возможность представления
множества процессов в виде решетки
произвольной размерности. При этом, граничные процессы решеток
могут быть объявлены соседними и, тем самым, на основе решеток могут быть
определены структуры типа тор.
Кроме того, в MPI имеются средства и для
формирования логических (виртуальных) топологий любого требуемого типа.
Приступая к изучению MPI, можно отметить, что, с одной
стороны, MPI достаточно
сложен – в стандарте MPI предусматривается наличие более 125
функций. С другой стороны, структура MPI является тщательно продуманной –
разработка параллельных программ может быть начата уже после рассмотрения всего
лишь 6 функций MPI. Все
дополнительные возможности MPI могут осваиваться по мере роста
сложности разрабатываемых алгоритмов и программ.