Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Сборник лекций по предмету Методы Программирова...doc
Скачиваний:
42
Добавлен:
22.09.2019
Размер:
4.83 Mб
Скачать

Программирование параллельных алгоритмов.

  1. Существуют подходы, основанные на специальных языках программирования

  2. Расширение обычных языков программирования (последовательное программирование)

  3. Использование специальных библиотек. Этот способ нашел наибольше распространение для программирования распределенных вычислений. Программы, реализующиеся для кластеров. Здесь используются уже существующие компоненты + дополнительные библиотеки.

Наибольшее распространение получили:

  1. Технология MPI (Message Passing Interface – интерфейс передачи сообщений) . Основным способом взаимодействия параллельных процессов в таких системах является передача сообщений друг другу.

  2. Технология PVM (Parallel Virtual Machine - виртуальная параллельная машина)

Главное отличие: PVM позволяет более гибко управлять параллельными процессами. MPI такой гибкости не достигла.

Технология mpi.

Разработана в середине 90-х годов. Основная идея: порождение нескольких процессов. Программа реализуется параллельно в виде вызова функции специальной библиотеки. Проблемы переносимости практически нет. Технология MPI снижает сложность разработки. Стандарт MPI фиксирует интерфейс, который должен соблюдаться как системой программирования на каждой вычислительной платформе, так и пользователем при создании своих программ. Современные реализации, чаще всего, соответствуют стандарту MPI версии 1.1. В 1997—1998 годах появился стандарт MPI-2.0, значительно расширивший функциональность предыдущей версии. Однако до сих пор этот вариант MPI не получил широкого распространения и в полном объеме не реализован ни на одной системе. MPI поддерживает работу с языками Фортран и Си.

Все дополнительные объекты: имена процедур, константы, предопределенные типы данных и т.п., используемые в MPI, имеют префикс MPI_. Если пользователь не будет использовать в программе имен с таким префиксом, то конфликтов с объектами MPI заведомо не будет. В языке Си, кроме того, является существенным регистр символов в названиях функций. Обычно в названиях функций MPI первая буква после префикса MPI_ пишется в верхнем регистре, последующие буквы – в нижнем регистре, а названия констант MPI записываются целиком в верхнем регистре. Все описания интерфейса MPI собраны в файле mpif.h (mpi.h).

Наиболее практической библиотекой является MPICH (англ. «Message Passing Interface Chameleon») — это одна из самых первых разработанных библиотек MPI.

Введение в библиотеку mpich.

Библиотека вызывается из программы и представляет собой набор функций. Достаточно использовать 6 функций.

Основные:

  1. MPI_INIT (INTEGER IERR) (init arg с, char *arg v[]) Инициализация параллельной части программы. Все другие процедуры MPI могут быть вызваны только после вызова MPI_INIT. Инициализация параллельной части для каждого приложения должна выполняться только один раз. В языке Си функции MPI_Init передаются указатели на аргументы командной строки программы argc и argv, из которых системой могут извлекаться и передаваться в параллельные процессы некоторые параметры запуска программы.

  2. MPI_FINALIZE (INTEGER IERR). Завершение параллельной части приложения. Все последующие обращения к любым процедурам MPI, в том числе к MPI_INIT, запрещены. К моменту вы-зова MPI_FINALIZE каждым процессом программы все действия, требующие его участия в обмене сообщениями, должны быть завершены.

  3. Общая схема MPI-программы на языке Си выглядит примерно следующим образом:

#include “mpi.h”

main(int argc, char **argv)

{

MPI_Init(&argc, &argv);

MPI_Finalize();

}

  1. MPI_INITIALIZED(FLAG, IERR)

LOGICAL FLAG INTEGER IERR. Процедура возвращает в

аргументе FLAG значение .TRUE., если вызвана из параллельной части приложения, и значение .FALSE. - в противном случае. Это единственная процедура MPI, которую можно вызвать до вызова MPI_INIT.

  1. MPI_COMM_SIZE(COMM, SIZE, IERR)

INTEGER COMM, SIZE, IERR. В аргументе SIZE процедура возвращает число параллельных процессов в коммуникаторе COMM.

  1. MPI_COMM_RANK(COMM, RANK, IERR)

INTEGER COMM, RANK, IERR. В аргументе RANK процедура возвращает номер процесса в коммуникаторе COMM. Если процедура MPI_COMM_SIZE для того же коммуникатора COMM вернула значение SIZE, то значение, возвращаемое процедурой MPI_COMM_RANK через переменную RANK, лежит в диапазоне от 0 до SIZE-1.