Опубликован: 28.10.2009 | Доступ: свободный | Студентов: 515 / 40 | Оценка: 4.67 / 4.39 | Длительность: 20:33:00
Лекция 4:

Параллельное программирование на основе MPI

6.8. Дополнительные сведения о MPI

6.8.1. Разработка параллельных программ с использованием MPI на алгоритмическом языке Fortran

При разработке параллельных программ с использованием MPI на алгоритмическом языке Fortran существует не так много особенностей по сравнению с применением алгоритмического языка C:

  1. Подпрограммы библиотеки MPI являются процедурами и, тем самым, вызываются при помощи оператора вызова процедур CALL,
  2. Коды завершения передаются через дополнительный параметр целого типа, располагаемый на последнем месте в списке параметров процедур,
  3. Переменная status является массивом целого типа из MPI_STATUS_SIZE элементов,
  4. Типы MPI_Comm и MPI_Datatype представлены целых типом INTEGER.

В качестве принятых соглашений при разработке программ на языке Fortran рекомендуется записывать имена подпрограмм с использованием прописных символов.

В качестве примера приведем вариант программы из п. 4.2.1.5 на алгоритмическом языке Fortran.

PROGRAM MAIN
  include 'mpi.h'
  INTEGER PROCNUM, PROCRANK, RECVRANK, IERR
  INTEGER STATUS(MPI_STATUS_SIZE)
  CALL MPI_Init(IERR)
  CALL MPI_Comm_size(MPI_COMM_WORLD, PROCNUM, IERR)
  CALL MPI_Comm_rank(MPI_COMM_WORLD, PROCRANK IERR)
  IF ( PROCRANK.EQ.0 )THEN
    ! Действия, выполняемые только процессом с рангом 0
    PRINT *,"Hello from process ", PROCRANK
    DO i = 1, PROCNUM-1
      CALL MPI_RECV(RECVRANK, 1, MPI_INT, MPI_ANY_SOURCE, 
        MPI_ANY_TAG, MPI_COMM_WORLD, STATUS, IERR)
      PRINT *,"Hello from process ", RECVRANK
    END DO
  ELSE ! Сообщение, отправляемое всеми процессами, 
       ! кроме процесса с рангом 0
    CALL MPI_SEND(PROCRANK,1,MPI_INT,0,0,MPI_COMM_WORLD,IERR)
  END IF
  MPI_FINALIZE(IERR);
  STOP
END

6.8.2. Общая характеристика среды выполнения MPI-программ

Для проведения параллельных вычислений в вычислительной системе должна быть установлена среда выполнения MPI-программ, которая бы обеспечивала разработку, компиляцию, компоновку и выполнение параллельных программ. Для выполнения первой части перечисленных действий - разработки, компиляции, компоновки - как правило, достаточно обычных средств разработки программ (таких, например, как Microsoft Visual Studio), необходимо лишь наличие той или иной библиотеки MPI. Для выполнения же параллельных программ от среды выполнения требуется ряд дополнительных возможностей, среди которых наличие средств указания используемых процессоров, операций удаленного запуска программ и т.п. Крайне желательно также наличие в среде выполнения средств профилирования, трассировки и отладки параллельных программ.

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

Запуск MPI-программы также зависит от среды выполнения, но в большинстве случаев данное действие выполняется при помощи команды mpirun. В числе возможных параметров этой команды:

  1. Режим выполнения - локальный или многопроцессорный. Локальный режим обычно указывается при помощи ключа -localonly. При выполнении параллельной программы в локальном режиме все процессы программы располагаются на компьютере, с которого был произведен запуск программы. Такой способ выполнения чрезвычайно полезен для начальной проверки работоспособности и отладки параллельной программы; часть такой работы может быть выполнена даже на отдельном компьютере вне рамок многопроцессорной вычислительной системы;
  2. Количество процессов, которые необходимо создать при запуске параллельной программы,
  3. Состав используемых процессоров, определяемый тем или иным конфигурационным файлом;
  4. Исполняемый файл параллельной программы;
  5. Командная строка с параметрами для выполняемой программы.

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

При запуске программы на нескольких компьютерах исполняемый файл программы должен быть скопирован на все эти компьютеры или же должен находиться на общем доступном для всех компьютеров ресурсе.

Дополнительная информация по средам выполнения параллельных программ на кластерных системах может быть получена, например, в Sterling (2001, 2002). Следует отметить также, что элементы стандартизации среды выполнения MPI-программ содержатся в стандарте MPI-2.

6.8.3. Дополнительные возможности стандарта MPI-2

Как уже отмечалось, стандарт MPI-2 был принят в 1997 г. Несмотря на достаточно большой период времени, прошедший с тех пор, использование данного варианта стандарта все еще ограничено. Среди основных причин такой ситуации можно назвать обычный консерватизм разработчиков программного обеспечения, сложность реализации нового стандарта и т.п. Важный момент состоит также в том, что возможностей MPI-1 оказывается достаточным для реализации многих параллельных алгоритмов, а сфера применимости дополнительных возможностей MPI-2 оказывается не столь широкой.

Для знакомства со стандартом MPI-2 может быть рекомендован информационный ресурс http://www.mpiforum.org, а также работа Group, et al. (1999b). Здесь же дадим краткую характеристику дополнительных возможностей стандарта MPI-2:

  • Динамическое порождение процессов, при котором процессы параллельной программы могут создаваться и уничтожаться в ходе выполнения,
  • Одностороннее взаимодействие процессов, что позволяет быть инициатором операции передачи и приема данных только одному процессу,
  • Параллельный ввод/вывод, обеспечивающий специальный интерфейс для работы процессов с файловой системой,
  • Расширенные коллективные операции, в числе которых, например, процедуры для взаимодействия процессов из нескольких коммуникаторов одновременно,
  • Интерфейс для алгоритмического языка C++.

6.9. Краткий обзор раздела

Данный раздел посвящен рассмотрению методов параллельного программирования для вычислительных систем с распределенной памятью с использованием MPI.

В самом начале раздела отмечается, что MPI - интерфейс передачи данных ( message passing interface ) - является в настоящий момент времени одним из основных подходов для разработки параллельных программ для вычислительных систем с распределенной памятью. Использование MPI позволяет распределить вычислительную нагрузку и организовать информационное взаимодействие ( передачу данных ) между процессорами. Сам термин MPI означает, с одной стороны, стандарт, которому должны удовлетворять средства организации передачи сообщений, а, с другой стороны, обозначает программные библиотеки, которые обеспечивают возможность передачи сообщений и при этом соответствуют всем требованиям стандарта MPI.

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

В подразделе 6.2 проводится быстрое и простое введение в разработку параллельных программ с использованием MPI. Излагаемого в подразделе материала достаточно для начала разработки параллельных программ разного уровня сложности.

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

В подразделе 6.4 рассматриваются коллективные операции передачи данных. Изложение материала соответствует последовательности изучения коммуникационных операций, использованной в разделе 3. Основной результат данного подраздела состоит в том, что MPI обеспечивает поддержку практически всех основных операций информационных обменов между процессами.

В подразделе 6.5 излагается материал, связанный с использованием в MPI производных типов данных. В подразделе представлены все основные способы конструирования производных типов - непрерывный, векторный, индексный и структурный. Обсуждается также возможность явного формирования сложных сообщений при помощи упаковки и распаковки данных.

В подразделе 6.6 обсуждаются вопросы управления процессами и коммуникаторами. Рассматриваемые в подразделе возможности MPI позволяют управлять областями действия коллективных операций и исключить взаимовлияние разных выполняемых частей параллельной программы.

В подразделе 6.7 рассматриваются возможности MPI по использованию виртуальных топологий. В подразделе представлены топологии, поддерживаемые MPI - прямоугольная решетка произвольной размерности ( декартова топология ) и топология графа любого необходимого вида.

В подразделе 6.8 приводятся дополнительные сведения о MPI. В их числе обсуждаются вопросы разработки параллельных программ с использованием MPI на алгоритмическом языке Fortran, дается краткая характеристика сред выполнения MPI-программ и приводится обзор дополнительных возможностей стандарта MPI-2.