Опубликован: 11.10.2012 | Уровень: для всех | Доступ: платный | ВУЗ: Санкт-Петербургский государственный университет
Лекция 2:

Программирование с использованием Intel MPI. Введение

< Лекция 1 || Лекция 2: 123 || Лекция 3 >
Аннотация: В этой лекции рассматривается история появления и развитие MPI, вводятся основные понятия и терминология. Даётся описание особенностей трансляции и запуска программ в MPI-1 и MPI-2. Приводится описание структуры MPI-программы.

Презентацию к данной лекции Вы можете скачать здесь.

Спецификация MPI. История создания. Версии

Большой интерес к системам передачи сообщений возник в 1980-е годы. Его следствием стало появление достаточно большого количества реализаций, создававшихся разными коллективами разработчиков и предназначенных для разных вычислительных систем.

Примеры:

p4, PICL, PARMACS, PVM, TCGMSG, Zipcode, Express и другие

Возникла необходимость координировать и стандартизировать этот процесс, поэтому в рамках конференции Supercomputing’92 состоялось совещание, на котором было принято решение о разработке стандарта программного интерфейса обмена сообщениями.

Процесс стандартизации был поддержан индустрией:

Convex, Cray, IBM, Intel, Meiko, nCUBE, NEC, Thinking Machines

Индустрия заинтересована в средстве разработки эффективных программ для высокопроизводительных вычислительных систем.

Официальный сайт MPI:

http://www.mpi-forum.org

Версия MPI-1 вышла в 1994 году

Версия MPI-2 вышла в 1998 году, первая реализация появилась в 2002 году.

Версия MPI-2.2 вышла 4 сентября 2009 года

Спецификация MPI-1

Содержит описание стандарта программного интерфейса обмена сообщениями.

Спецификация учитывает опыт предшествующих разработок и ориентирована на большую часть аппаратных платформ. Несмотря на то, что MPI рассчитано на использование с языками C/C++ и Fortran, семантика в значительной степени не зависит от языка.

В MPI-1 описываются интерфейсы процедур двухточечных и коллективных обменов, сбора информации, организации обменов в группах процессов, синхронизации процессов, виртуальные топологии, привязки к языкам программирования и т. д.

Спецификация MPI-2

Является дальнейшим развитием MPI.

Новое в MPI-2 (по сравнению с MPI-1):

  • возможность создания новых процессов во время выполнения MPI-программы (в MPI-1 количество процессов фиксировано, крах одного приводит к краху всей программы);
  • новые разновидности двухточечных обменов (односторонние обмены);
  • новые возможности коллективных обменов;
  • поддержка внешних интерфейсов;
  • поддержка многопоточности;
  • операции параллельного ввода-вывода с файлами.

Масштабируемость MPI-программ. Сравнение двух реализаций

Зависимость ускорения параллельной версии кода ACE от количества вычислительных узлов:


Основные понятия. Терминология


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

При выполнении глобальных операций используются коллективные обмены.

Асинхронные коммуникации реализуются с помощью запросов о получении сообщений.

Область взаимодействия (область связи) определяет группу процессов. Все процессы, принадлежащие одной области взаимодействия, могут обмениваться сообщениями. Описывает это множество процессов специальная информационная структура, которая называется коммуникатором. Этот механизм скрывает от программиста внутренние коммуникационные структуры.


Коммуникаторы, создаваемые по умолчанию:

  • MPI_COMM_WORLD - содержит все процессы;
  • MPI_COMM_SELF - коммуникатор, содержащий только вызывающий процесс;
  • MPI_COMM_NULL - пустой коммуникатор.

Сообщение содержит пересылаемые данные и служебную информацию:

  • идентификатор процесса-отправителя сообщения (ранг процесса);
  • адрес, по которому размещаются пересылаемые данные процесса-отправителя;
  • тип пересылаемых данных;
  • количество данных (размер буфера сообщения для того, чтобы принять сообщение, процесс должен отвести для него достаточный объем оперативной памяти);
  • идентификатор процесса, который должен получить сообщение;
  • адрес, по которому должны быть размещены данные процессом- получателем;
  • идентификатор коммуникатора, описывающего область взаимодействия, внутри которой происходит обмен.

Передача-прием сообщения


Ранг источника дает возможность различать сообщения, приходящие от разных процессов.

Тег  - это задаваемое пользователем целое число от 0 до 32767, идентификатор сообщения. Теги могут использоваться для соблюдения определенного порядка приема сообщений.

Данные, содержащиеся в сообщении, в общем случае организованы в массив элементов, каждый из которых имеет один и тот же тип. По умолчанию предполагается, что элементы массива располагаются в памяти последовательно, один за другим.

Кроме пересылки данных система передачи сообщений поддерживает пересылку информации о состоянии процессов коммуникации. Это может быть, например, уведомление о том, что прием данных, отправленных другим процессом, завершен.

Перед использованием процедур передачи сообщений программа должна "подключиться" к системе обмена сообщениями.

Подключение выполняется с помощью соответствующего вызова процедуры из библиотеки. В одних реализациях модели допускается только одно подключение, а в других  несколько подключений к системе.

Прием сообщения начинается с подготовки буфера достаточного размера. В этот буфер записываются принимаемые данные.

Данные могут быть закодированы, в этом случае при их считывании выполняется декодирование. Кодирование данных (преобразование в некоторый универсальный формат) требуется для того, чтобы обеспечить обмен сообщениями между системами с разным форматом представления данных.

Операция отправки или приема сообщения считается завершенной, если программа может вновь использовать такие ресурсы, как буферы сообщений.

< Лекция 1 || Лекция 2: 123 || Лекция 3 >
Константин Белюстин
Константин Белюстин
Украина, г. Киев
Андрей Частухин
Андрей Частухин
Россия