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

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

При разработке параллельных программ с использованием 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 20c Действия, выполняемые только процессом с рангом 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 ", RecvRank10 continue goto 30c Сообщение, отправляемое всеми процессами, кроме процесса с рангом 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 90program mainuse mpi integer ProcNum, ProcRank, RecvRank, ierrinteger status(MPI_STATUS_SIZE)integer icall 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 enddoelsec Сообщение, отправляемое всеми процессами, кроме процесса c с рангом 0 call MPI_SEND(ProcRank, 1, MPI_INTEGER, 0, 0, MPI_COMM_WORLD, ierr)endifcall MPI_FINALIZE(ierr)stopend

Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: