- •Зачем применяються суперкомпьютеры
- •Параллельная обработка данных на эвм
- •Классификация параллельных компьютеров и систем
- •Векторно-конвейерные компьютеры
- •Функциональные устройства
- •Секция управления процессора
- •Паралельные компьютеры с общей памятью
- •Вычислительные системы с распределенной памятью
- •Кластерные проекты
- •Система функциональных устройств. Закон амдала.
- •Как повышают производительность компьютеров
- •Усложнение и наращивание аппаратных средств
- •Параллельная обработка
- •Конвейерная обработка
- •Повышение интеллектуальности управления компьютера
- •Технологии параллельного программирования
- •Использование традиционных последовательных языков
- •Технология программирования ОреnМр.
- •Система программирования dvm.
- •Система программирования на mPc.
- •Система программирования на основе передачи сообщения
- •Система программирования mpi
- •Общие функции mpi.
- •Общие функции mpi
- •Прием/передача сообщения между отдельными процессами.
- •Прием/передача сообщения без блокировки.
- •Объединение запросов на взаимодействия.
- •Совмещенные прием и передача сообщений.
- •Коллективные взаимодействия процессов.
- •Синхронизация процессов
- •Работа с группами процессов
Система программирования mpi
Наиболее распространенной технологией программирования параллельных компьютеров с распределенной памятью в настоящее время является MPI.
Основным способом взаимодействия параллельных процессов в таких системах является передача сообщений друг другу. Это и отражено в названии данной технологии — Меssage Passing Interface. Стандарт МРI фиксирует интерфейс, который должны соблюдать как система программирования МРI на каждой вычислительной системе, так и пользователь при создании своих программ. Поддерживает работу на языках C и Fortran.
Полная версия интерфейса содержит описание более 120 функций. В настоящее время все больше и больше реализаций МР1 поддерживают работу с нитями.
Все дополнительные объекты: имена функций, константы, предопределенные типы данных и т. п., используемые в МРI, имеют префикс МРI_.
Например, функция посылки сообщения от одного процесса другому имеет имя MPI_SEND. Если пользователь не будет использовать в программе имен с таким префиксом, то конфликтов с объектами МРI заведомо не будет.
Все описания интерфейса МРI собраны в файле mpi.h, поэтому в начале МРI-программы, должна стоять директива
# include <mpi.h>.
МР1-программа — это множество параллельных взаимодействующих процессов. Все процессы порождаются один раз, образуя параллельную часть программы. В ходе выполнения МРI-программы порождение дополнительных процессов или уничтожение существующих не допускается.
Каждый процесс работает в своем адресном пространстве, никаких общих переменных или данных в МРI нет. Основным способом взаимодействия между процессами является явная посылка сообщений.
Для локализации взаимодействия параллельных процессов программы можно создавать группы процессов, предоставляя им отдельную среду для общения — коммуникатор.
Состав образуемых групп произволен. Группы могут полностью входить одна в другую, не пересекаться или пересекаться частично. При старте программы всегда считается, что все порожденные процессы работают в рамках всеобъемлющего коммуникатора, имеющего предопределенное имя MPI_COMM_WORLD. Этот коммуникатор существует всегда и служит для взаимодействия всех процессов МРI-программы.
Каждый процесс МРI-программы имеет уникальный атрибут номер процесса, который является целым неотрицательным числом.
С помощью этого атрибута происходит значительная часть взаимодействия процессов между собой.
Ясно, что в одном и том же коммуникаторе все процессы имеют различные номера. Но поскольку процесс может одновременно входить в разные коммуникаторы, то его номер в одном коммуникаторе может отличаться от его номера в другом. Отсюда два основных атрибута процесса: коммуникатор и номер в коммуникаторе.
Если группа содержит n процессов, то номер любого процесса в данной группе лежит в пределах от 0 до n - 1. Подобная линейная нумерация не всегда адекватно отражает логическую взаимосвязь процессов приложения.
Основным способом общения процессов между собой является посылка сообщений.
Сообщение - это набор данных некоторого типа. Каждое сообщение имеет несколько атрибутов, в частности, номер процесса отправителя, номер процесса получателя, идентификатор сообщения и др. Одним из важных атрибутов сообщения является его идентификатор или тэг.
По идентификатору процесс, принимающий сообщение, например, может различить два сообщения, пришедшие к нему от одного и того же процесса. Сам идентификатор сообщения является целым неотрицательным числом, лежащим в диапазоне от 0 до 32767.
Для работы с атрибутами сообщений введена структура MPI_Status, поля которой дают доступ к значениям атрибутов.
В МРI предусмотрен механизм для введения производных типов данных (derived datatype). Описав состав и схему размещения в памяти посылаемых данных, пользователь в дальнейшем работает с такими типами так же, как и со стандартными типами данных МРI.