Цель работы: Изучение и разработка интерфейса передачи сообщений для параллельных приложений.
Создать библиотеку функций MPI - интерфейса для кластера на базе сети Novell Netware.
Поддерживающая протокольная система - эмулятор протокола NETBIOS фирмы Novell ( файл netbios.exe).
Поддерживающая библиотека – библиотека функций, разработанная в рамках лабораторной работы N6.
Описание MPI – интерфейса (файлы lab7_1.txt и lab7_2.txt).
MPI - это стандарт на программный инструментарий для обеспечения связи между ветвями параллельного приложения. MPI расшифровывается как "Message passing interface" ("Взаимодействие через передачу сообщений").
MPI представляет собой библиотеку программирования (заголовочные и библиотечные файлы для языков Си, Си++) . Набор функций прост в освоении и позволяет быстро написать надежно работающую программу. Использование всей мощи MPI позволит получить быстро работающую программу - при сохранении ее надежности .
Параллельное приложение состоит из нескольких ветвей (процессов или задач), выполняющихся одновременно. Ветви обмениваются друг с другом данными в виде сообщений. Сообщения проходят под идентификаторами, которые позволяют программе и библиотеке связи отличать их друг от друга. Для совместного проведения тех или иных расчетов процессы внутри приложения объединяются в группы. Каждый процесс может узнать у библиотеки связи свой номер внутри группы, и, в зависимости от номера приступает к выполнению соответствующей части расчетов.
Особенность MPI - понятие области связи (communication domains). При запуске приложения все процессы помещаются в создаваемую для приложения общую область связи. При необходимости они могут создавать новые области связи на базе существующих. Все области связи имеют независимую друг от друга нумерацию процессов. Программе пользователя в распоряжение предоставляется коммуникатор - описатель области связи. В программе может существовать несколько коммуникаторов.
Многие функции MPI имеют среди входных аргументов коммуникатор, который ограничивает сферу их действия той областью связи, к которой он прикреплен. MPI_COMM_WORLD - название коммуникатора, создаваемого библиотекой автоматически при инициализации библиотеки MPI параллельным приложением. Он описывает стартовую область связи, объединяющую все процессы приложения.
Все функции MPI условно можно разбить на блокирующие, не блокирующие, локальные и коллективные.
Блокирующие функции останавливают (блокируют) выполнение процесса до тех пор, пока производимая ими операция не будет выполнена. Не блокирующие функции возвращают управление немедленно, а выполнение операции продолжается в фоновом режиме. Локальные функции не инициируют пересылок данных между ветвями. Коллективные функции должны быть вызваны всеми ветвями-абонентами того коммуникатора, который передается им в качестве аргумента.
При запуске приложения все его ветви должны вызвать функцию инициализации библиотеки MPI - MPI_Init.
При завершении приложения все его ветви должны выполнить функцию нормального завершения библиотеки - MPI_Finalize.
Если приложение завершается по причине ошибок времени выполнения, то ветвь, обнаружившая ошибку, должна выполнить функцию MPI_Abort.
При запуске приложения автоматически создается коммуникатор MPI_COMM_WORLD, объединяющий все процессы приложения.
Любой процесс может узнать количество ветвей приложения с помощью функции MPI_size и свой номер в приложении с помощью функции MPI_rank, объединенных этим коммуникатором.
Простейшая схема передачи сообщений - связь "точка-точка" между двумя ветвями. Одна ветвь вызывает функцию передачи сообщения, а другая - функцию приема. В качестве основных параметров функциям задаются буфер приема/передачи, коммуникатор, имя (номер) процесса – источника/адресата сообщения или джокер MPI_ANY_SOURCE, идентификатор сообщения или джокер MPI_ANY_TAG, тип данных. Тип данных задается предопределенными в MPI описателями встроенных типов(MPI_CHAR, MPI_INT, …) или зарегистрированными пользователем описателями типов.
Функции передачи–приема сообщения по схеме «точка – точка»: MPI_Send , MPI_Recv, MPI_Sendrecv.
Для обслуживания приема используются вспомогательные функции:
· MPI_Status – запрос статуса завершения приема,
· MPI_Get_count - запрос количества фактически принятых данных,
· MPI_Probe – предварительный запрос статуса поступившего сообщения перед его приемом.
Коллективные обмены сообщениями осуществляются группой ветвей, объединенных некоторым коммуникатором. Коллективный обмен инициируется в том случае, когда все ветви осуществили вызов одноименной коллективной функции с одинаковыми основными параметрами. Коллективная функция выполняет одновременно и прием, и передачу и имеет большое количество параметров, часть которых нужна для приема, а часть для передачи. В разных ветвях та или иная часть параметров игнорируется, в зависимости от роли ветви в обмене.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.