Programming Taskbook


E-mail:

Пароль:

Регистрация пользователя   Восстановление пароля

English

ЮФУ

Электронный задачник по программированию

©  М. Э. Абрамян (Южный федеральный университет), 1998–2022

 

PT for MPI-2 | Выполнение заданий в параллельном режиме   | Основные понятия MPI-программирования

PrevNext


Основные понятия 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).


PrevNext

 

Рейтинг@Mail.ru

Разработка сайта:
М. Э. Абрамян, В. Н. Брагилевский

Последнее обновление:
01.01.2022