Опубликован: 28.07.2007 | Уровень: специалист | Доступ: платный
Лекция 5:

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

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

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

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

  • все константы, переменные и функции объявляются в подключаемом файле mpif.h ;
  • подпрограммы библиотеки MPI являются процедурами и, тем самым, вызываются при помощи оператора вызова процедур CALL ;
  • коды завершения передаются через дополнительный параметр целого типа, располагаемый на последнем месте в списке параметров процедур (кроме MPI_Wtime и MPI_Wtick );
  • все структуры (такие, например, как переменная status ) являются массивами целого типа, размеры и номера ячеек которых описаны символическими константами (такими, как MPI_STATUS_SIZE для статуса операций);
  • типы MPI_Comm и MPI_Datatype представлены целых типом INTEGER.

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

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

Программа 5.3. Параллельная программа на языке Fortran 77

! Пример программы, использующей MPI на Fortran 77
     program main
     include 'mpif.h'
     integer ProcNum, ProcRank, RecvRank, ierr
     integer i
     integer st(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 .gt. 0) goto 20
c Действия, выполняемые только процессом с рангом 0
     print *, "Hello from process ", ProcRank
     do 10 i = 1, ProcNum - 1
       call MPI_RECV(RecvRank, 1, MPI_INTEGER, MPI_ANY_SOURCE,
         MPI_ANY_TAG, MPI_COMM_WORLD, st, ierr)
       print *, "Hello from process ", RecvRank
10   continue
     goto 30
c Сообщение, отправляемое всеми процессами, кроме процесса 
с рангом 0
 20   call MPI_SEND(ProcRank, 1, MPI_INTEGER, 0, 0, 
        MPI_COMM_WORLD, ierr)
30   call MPI_FINALIZE(ierr)
     stop
     end

Программа 5.4. Параллельная программа на языке Fortran 90

! Пример программы, использующей MPI на Fortran 90
program main
use mpi

integer ProcNum, ProcRank, RecvRank, ierr
integer status(MPI_STATUS_SIZE)
integer i
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_INTEGER, MPI_ANY_SOURCE,
      MPI_ANY_TAG, MPI_COMM_WORLD, status, ierr)
    print *, "Hello from process ", RecvRank
  enddo
else
c Сообщение, отправляемое всеми процессами, кроме процесса 
c с рангом 0
  call MPI_SEND(ProcRank, 1, MPI_INTEGER, 0, 0, MPI_COMM_WORLD, ierr)
endif
call MPI_FINALIZE(ierr)
stop
end
5.8.2. Общая характеристика среды выполнения MPI-программ

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

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

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

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

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

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

Дополнительная информация по средам выполнения параллельных программ на кластерных системах может быть получена, например, в [ [ 70 ] , [ 71 ] ].

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

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

Для знакомства со стандартом MPI -2 может быть рекомендован информационный ресурс http://www.mpiforum.org, а также работа [ [ 42 ] ]. Здесь же дадим краткую характеристику дополнительных возможностей стандарта MPI -2:

  • динамическое порождение процессов, при котором процессы параллельной программы могут создаваться и уничтожаться в ходе выполнения;
  • одностороннее взаимодействие процессов, что позволяет быть инициатором операции передачи и приема данных только одному процессу ;
  • параллельный ввод/вывод, обеспечивающий специальный интерфейс для работы процессов с файловой системой;
  • расширение возможностей коллективных операций, в числе которых, например, взаимодействие через глобальные коммуникаторы (intercommunicator);
  • интерфейс для алгоритмических языков C++ и Fortran 90.
Дмитрий Степаненко
Дмитрий Степаненко
Россия
Михаил Бурдаев
Михаил Бурдаев
Россия