
- •Федеральное агенство связи Поволжская государственная академия телекоммуникаций и информатики
- •Введение
- •Реализация и настройка кластера интерфейса mpi в среде ms Windows 9x/nt/xp
- •Рекомендуемая литература
- •Лабораторная работа № 1 Компиляция программ, использующих интерфейс mpi
- •Подготовка к работе
- •Контрольные вопросы
- •3. Задание
- •4. Методические указания
- •4. Листинг программы
- •5. Примечания
- •Лабораторная работа № 2 Использование функции групповой рассылки данных
- •Подготовка к работе
- •Контрольные вопросы
- •3. Задание
- •4. Методические указания
- •5. Примечания
- •Лабораторная работа № 3 Вычисление числа π
- •Подготовка к работе
- •Контрольные вопросы
- •Задание
- •4. Методические указания
- •5. Пример выполнения
- •6. Примечания
- •Лабораторная работа № 4 Передача данных отдельным процессам
- •Задание
- •Методические указания
- •Алгоритм
- •Пример выполнения
- •Лабораторная работа № 5 Матричные вычисления
- •Контрольные вопросы
- •Приложение а
- •Приложение в Краткий справочник функций mpi
- •Сообщения «точка-точка»
- •Групповые сообщения
- •Типы пересылаемых данных
- •Аргументы
Приложение а
Основные понятия
Наиболее распространенной технологией программирования для параллельных компьютеров с распределенной памятью в настоящее время является MPI. Основным способом взаимодействия параллельных процессов в таких системах является передача сообщений друг другу. Это и отражено в названии данной технологии – Message Passing Interface (интерфейс передачи сообщений). Стандарт MPI фиксирует интерфейс, который должен соблюдаться как системой программирование на каждой вычислительной платформе, так и пользователем при создании своих программ. Самый распространенной версией является MPI 1.1 разработанной в 1998 г.
MPI поддерживает работу с языками Фортран и Си. Полная версия интерфейса содержит более 125 процедур и функций.
Интерфейс поддерживает создание параллельных программ в стиле MIMD (Multiple Instruction Multiple Data), и SPMD-модель (Single Program Multiple Data).
MPI-программа – это множество параллельных взаимодействующих процессов. Все процессы порождаются один раз на все время выполнения программы. Процессы не имеют общих переменных или данных и работают в своих собственных адресных пространствах. Основным способом взаимодействия между процессами является явная посылка сообщений.
Коммуникатор – это группа процессов объединенных в одну среду общения. Их состав произволен и они могут пересекаться. Процессы могут взаимодействовать только внутри одного коммуникатора, тем самым сообщения, отправленные в разных коммуникаторах не пересекаются и не мешают друг другу. Все процессы имеют доступ к предопределенному коммуникатору MPI_COMM_WORLD, который существует во все время выполнения работ, для взаимодействия всех запущенных процессов MPI-программы.
Номер процесса – целое неотрицательное число – уникальный идентификатор процесса в коммуникаторе. Данный номер является адресом процесса, с помощью которого ему можно посылать сообщения. У процесса может быть несколько номеров в разных коммуникаторах. Если коммуникатор содержит n процессов то номер любого процесса лежит в пределах от 0 до n-1.
Тем самым коммуникатор и номер коммуникатора являются двумя основными атрибутами процесса.
Основным способом общения процессов между собой является явная посылка сообщений. Сообщение – набор данных некоторого типа, которые имеют несколько атрибутов, включая номер процесса отправителя, получателя, идентификатор сообщения и др.
Идентификатор (тег) – по нему процесс принимающий сообщения может различить два сообщения пришедшие с одного и того же процесса. Представляет собой неотрицательное число.
В последнем аргументе сообщения большинство процедур MPI возвращает информацию об успешности завершения. В случае успешного выполнения возвращается MPI_SUCCESS, иначе код ошибки.
Приложение в Краткий справочник функций mpi
Процедуры инициализации
Функция |
Описание |
Аргументы |
MPI_Init(*argc,*argv) |
Процедура инициализации MPI интерфейса. Должна вызываться до первой любой MPI фунции |
Аргументы, переданные программе при запуске |
MPI_Comm_size(comm,*size) |
Получает число процессов в коммуникаторе |
Номер коммуникатора, переменная для хранения результата |
MPI_Comm_rank(comm,*rank) |
Получет номер процесса |
Номер коммуникатора, переменная для хранения результата |
MPI_Abort(comm,errorcode) |
Аварийный выход из MPI программы |
Номер коммуникатора, номер ошибки при выходе |
MPI_Get_processor_name(*name,*resultlength) |
Получить имя хоста |
Буфер для хранения строки с именем, число символов в буфере |
MPI_Initialized (*flag) |
Индикация прохождения инициализации MPI интерфейса |
Флаг состояния (1-успешно, 0 –ошибка) |
MPI_Wtime () |
Получить время в секундах, прошедшее с начала суток |
|
MPI_Finalize () |
Остановка MPI интерфейса и отчистка памяти программы. Должна вызыватся в любой MPI программе. После неё вызывать MPI функции нельзя (включая MPI_Init()) |
|