|
Основные понятия MPI-программирования
Знакомство с параллельным программированием начнем с
рассмотрения следующей простой задачи из начальной группы MPI1Proc.
Это позволит нам не только ознакомиться с основными понятиями
параллельного программирования, основанного на передаче сообщений, но
и изучить возможности электронного задачника, связанные с вводом и
выводом данных, а также с печатью отладочной информации.
MPI1Proc2.
В каждом из процессов, входящих в коммуникатор
MPI_COMM_WORLD, прочесть одно целое число A и вывести его
удвоенное значение. Кроме того, для главного процесса (процесса ранга
0) вывести количество процессов, входящих в коммуникатор
MPI_COMM_WORLD. Для ввода и вывода данных использовать поток
ввода-вывода pt. В главном процессе продублировать вывод данных в
разделе отладки, отобразив на отдельных строках удвоенное значение A
и количество процессов (использовать два вызова функции ShowLine,
определенной в задачнике наряду с функцией Show).
Прежде всего разъясним термины параллельного MPI-программирования.
При параллельном выполнении программы запускается несколько
экземпляров этой программы. Каждый запущенный экземпляр
представляет собой отдельный процесс (англ. process), который может
взаимодействовать с другими процессами, обмениваясь сообщениями
(messages). MPI-функции предоставляют разнообразные средства для
реализации такого взаимодействия (аббревиатура MPI расшифровывается
как «Message Passing Interface» интерфейс передачи сообщений).
Для идентификации каждого процесса в группе процессов
используется понятие ранга (rank). Ранг процесса это порядковый номер
процесса в группе процессов, отсчитываемый от нуля (таким образом,
первый процесс имеет ранг 0, а последний процесс ранг K 1, где K
количество процессов в группе). При этом группа процессов может
включать лишь часть всех запущенных процессов параллельного
приложения. Заметим, что в формулировках заданий буква K используется
обычно для обозначения количества процессов.
С группой процессов связывается особая сущность библиотеки MPI,
называемая коммуникатором (communicator). Любое взаимодействие
процессов возможно только в рамках того или иного коммуникатора.
Стандартный коммуникатор, содержащий все процессы, запущенные при
параллельном выполнении программы, имеет имя MPI_COMM_WORLD.
«Пустой» коммуникатор, не содержащий ни одного процесса, имеет имя
MPI_COMM_NULL. Коммуникатор можно представлять себе как канал,
соединяющий между собой некоторую группу процессов. В некоторых
случаях бывает удобно организовывать дополнительные каналы, которые,
например, содержат не все исходные процессы или в которых изменен
порядок их следования. В этой ситуации создаются новые коммуникаторы.
Более подробно работа с коммуникаторами рассматривается в группах
заданий MPI5Comm и MPI8Inter. В заданиях начальных четырех групп
всегда используется стандартный коммуникатор MPI_COMM_WORLD.
Процесс ранга 0 часто называют главным процессом (master process), а
остальные процессы подчиненными процессами (slave processes). Как правило,
главный процесс играет особую роль по отношению к подчиненным
процессам, передавая им свои данные или получая данные от всех (или
некоторых) подчиненных процессов. В рассматриваемом задании
MPI1Proc2 все процессы должны выполнить одно и то же действие
прочесть одно целое число и вывести его удвоенное значение, а главный
процесс, кроме этого, должен выполнить дополнительное действие
вывести количество всех запущенных процессов (иными словами,
количество всех процессов, входящих в коммуникатор
MPI_COMM_WORLD). Обратите внимание на то, что в этом простом
задании процессам не требуется обмениваться сообщениями друг с другом
(таковы все задания вводной группы MPI1Proc).
|