MPI — различия между версиями

Материал из ЭНЭ
Перейти к: навигация, поиск
м (Некоторые подробности)
(обновл., структ.)
 
Строка 5: Строка 5:
 
Программная библиотека и среда исполнения позволяют разрабатывать ''переносимые'' программы на Си, Си++ и Фортране, способные работать в ''гетерогенных'' параллельных вычислительных системах. Существуют сторонние решения (т.наз. «обёртки»), открывающие возможности библиотеки и среды для программ на иных языках программирования.
 
Программная библиотека и среда исполнения позволяют разрабатывать ''переносимые'' программы на Си, Си++ и Фортране, способные работать в ''гетерогенных'' параллельных вычислительных системах. Существуют сторонние решения (т.наз. «обёртки»), открывающие возможности библиотеки и среды для программ на иных языках программирования.
  
Спецификация MPI публикуется с 1994 года, и существует ряд её воплощений, как коммерческих, так и [[СПО|свободных]]. Наиболее отработанной версией спецификации является версия 1.3 (2008), а наиболее новой — версия 2.2 (2009); в различных библиотеках–реализациях воплощается различный объём спецификации. Среди наиболее известных воплощений на конец 2000-х гг. — открытые [[OpenMPI]] и [[MPICH]], и коммерческие Hewlett Packard MPI и Intel MPI, доступные, при соблюдении определённых условий, бесплатно.
+
Спецификация MPI публикуется с 1994 года, и существует ряд её воплощений, как коммерческих, так и [[СПО|свободных]]. В различных библиотеках–реализациях воплощается различный объём спецификации.
  
''Сведения на 4-й квартал 2011 года.''
+
Наиболее отработанной версией спецификации к 2010-м годам считалась версия 1.3 (май 2008), а наиболее новой — версия 2.2 (сентябрь 2009). С 2012 года публикуются версии 3-й серии спецификации — 3.0 (сентябрь 2012), 3.1 (июнь 2015). Разрабатывается 4-я серия спецификации.
 +
 
 +
<big>↑</big>''Сведения на 2-й квартал 2017 года.''
 +
 
 +
Среди наиболее известных воплощений на конец 2000-х гг. — открытые [[OpenMPI]] и [[MPICH]], и коммерческие Hewlett Packard MPI и Intel MPI, доступные, при соблюдении определённых условий, бесплатно.
  
 
== Понятие MPI-программы ==
 
== Понятие MPI-программы ==
Строка 47: Строка 51:
  
 
— [[user:Yury Tarasievich|Ю.Т.]]
 
— [[user:Yury Tarasievich|Ю.Т.]]
 
;Ссылки и примечания
 
<references/>
 
  
 
== Источники ==
 
== Источники ==
 
* Официальные электронные варианты спецификации MPI: [http://www.mpi-forum.org/docs/].
 
* Официальные электронные варианты спецификации MPI: [http://www.mpi-forum.org/docs/].
 
* Гропп...
 
* Гропп...
 +
----
 +
<references/>
  
 
[[category:параллельные вычисления]]
 
[[category:параллельные вычисления]]

Текущая версия на 13:04, 24 февраля 2017

MPI (англ. message passing interface): стандарт (спецификация) на программную библиотеку и среду исполнения для параллельных программ, построенных по модели с передачей сообщений; также краткое название конкретных воплощений (реализаций; implementations) данного стандарта.

Одной из предпосылок создания спецификации MPI международным консорциумом стало существование в начале 1990-х гг. большого количества разнотипных программных сред исполнения параллельных программ, воплощавших парадигму передачи сообщений[1]. Дело дошло до того, что среды с передачей сообщений стали напоминать ассемблеры, так многочисленны они были, притом у каждого производителя оборудования была своя.

Программная библиотека и среда исполнения позволяют разрабатывать переносимые программы на Си, Си++ и Фортране, способные работать в гетерогенных параллельных вычислительных системах. Существуют сторонние решения (т.наз. «обёртки»), открывающие возможности библиотеки и среды для программ на иных языках программирования.

Спецификация MPI публикуется с 1994 года, и существует ряд её воплощений, как коммерческих, так и свободных. В различных библиотеках–реализациях воплощается различный объём спецификации.

Наиболее отработанной версией спецификации к 2010-м годам считалась версия 1.3 (май 2008), а наиболее новой — версия 2.2 (сентябрь 2009). С 2012 года публикуются версии 3-й серии спецификации — 3.0 (сентябрь 2012), 3.1 (июнь 2015). Разрабатывается 4-я серия спецификации.

Сведения на 2-й квартал 2017 года.

Среди наиболее известных воплощений на конец 2000-х гг. — открытые OpenMPI и MPICH, и коммерческие Hewlett Packard MPI и Intel MPI, доступные, при соблюдении определённых условий, бесплатно.

Понятие MPI-программы

Так называемые «MPI-программы» являются одним из известных классов программ для параллельных вычислений, но, строго говоря, такое название неправильно, поскольку MPI это название спецификации (стандарта) на библиотеку функций, дающих возможность организовывать параллельные вычисления в программах, написанных на языках C, C++, Fortran.

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

Основные возможности

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

На разных вычисляющих узлах, занятых под исполнение параллельной программы, могут работать разные потоки команд (программы), согласно модели МКМД. На практике, вычисления в среде MPI чаще всего проводятся в модели ОКМД, а среда вычислений обычно однородна (гомогенна) по составу оборудования и ОС. Этим порождается такая порядок (pattern) составления программ, при которой один и тот же исполняемый модуль тиражируется по всем вычислителям, а работа модуля программируется таким образом, что один из экземпляров работает как ведущий (координатор), а прочие — как ведомые[2].

Ранее считалось, что среда MPI более эффективна для массивно-параллельных машин, но менее эффективна в гетерогенных сетях (кластерах), по сравнению, например, с PVM[3]. В наше время среда MPI поддерживается (т. е., имеет воплощения) на подавляющем большинстве параллельных архитектур и применяется практически повсеместно, а прочие модели упоминаются редко. Известным исключением и особым случаем является среда HPC компании Microsoft.

Спецификация задаёт и синтаксис, и семантику основного состава функций. Всего в спецификации 1-й серии определено более 125 функций, но число ключевых значительно меньше. На самом деле, полностью функциональная «MPI-программа» может быть написана с использованием следующих 6 функций (совершенно минимальная, способная лишь стартовать и завершиться – с использованием первых двух из этого перечня):

  1. пуск и остановка задачи:
    • MPI_Init : инициализация среды исполнения;
    • MPI_Finalize : завершение работы среды исполнения;
  2. получение сведений о задаче и её окружении:
    • MPI_Comm_rank : получение информации об числе процессов;
    • MPI_Comm_size : получение информации о процессе;
    • MPI_Get_processor_name : получение информации о машине, на которой исполняется процесс; эту функцию некоторые авторы не считают необходимой;
  3. обмен данными с другими частями задачи:
    • MPI_Send : передача сообщения;
    • MPI_Recv : приём сообщения.

Считается, что зная только эти функции, пользователь может эффективно пользоваться средой MPI и изучать дополнительную функциональность позднее, по потребности.

Некоторые подробности

Важнейшими понятиями MPI являются процесс, процессор и узел (node, host).

Процесс это логический агент (в терминах параллельных вычислений), исполняющий поток команд и имеющий «свой» (доступный) массив (поток) данных. Понятие процессор толкуется в спецификации как аппаратное устройство, которое включает в себя вычисляющий узел, способный исполнять действия заданные в потоке команд (т. е., собственно процессор или ядро или под.). Узел может включать в себя один или более «процессоров», и поддерживать (средствами ОС) исполнение одного или нескольких «процессов».

Соответствие между процессом в понятиях MPI и «реальным» процессом (структурой в ОС) задаётся средой и обычно скрывается от пользователя (прикладного программиста). Для упрощения можно считать соответствие между потоком команд в процессоре (ядре) и процессом MPI таким же, как и для «обычной» задачи в данной ОС. Так, хотя процесс в среде MPI не то же самое, что процесс в ОС UNIX, на практике эти сущности могут быть тождественны (cуществуют и такие воплощения спецификации, в которых один юникс-процесс может «содержать» несколько МПИ-процессов[4]).

Число процессов на узле может быть любым, но практически при пользовании его ограничивают числом процессоров.

Использование многонитевости (multi-threading) в спецификации не оговаривается, но и не запрещается.

Ю.Т.

Источники

  • Официальные электронные варианты спецификации MPI: [1].
  • Гропп...

  1. В свою очередь, большое количество таких решений объяснялось сравнительно меньшей стоимость
  2. Отсюда часто встречаемый в главных исходных модулях MPI-программ блок ветвления: if(rank==0) и т.д.
  3. См., напр.: Geist, Kohl, Papadopoulos. PVM and MPI: a Comparison of Features (1996).
  4. Ссылка [29] из Гроппа.