MPI — различия между версиями
м (→Некоторые подробности) |
(обновл., структ.) |
||
Строка 5: | Строка 5: | ||
Программная библиотека и среда исполнения позволяют разрабатывать ''переносимые'' программы на Си, Си++ и Фортране, способные работать в ''гетерогенных'' параллельных вычислительных системах. Существуют сторонние решения (т.наз. «обёртки»), открывающие возможности библиотеки и среды для программ на иных языках программирования. | Программная библиотека и среда исполнения позволяют разрабатывать ''переносимые'' программы на Си, Си++ и Фортране, способные работать в ''гетерогенных'' параллельных вычислительных системах. Существуют сторонние решения (т.наз. «обёртки»), открывающие возможности библиотеки и среды для программ на иных языках программирования. | ||
− | Спецификация MPI публикуется с 1994 года, и существует ряд её воплощений, как коммерческих, так и [[СПО|свободных]]. | + | Спецификация MPI публикуется с 1994 года, и существует ряд её воплощений, как коммерческих, так и [[СПО|свободных]]. В различных библиотеках–реализациях воплощается различный объём спецификации. |
− | ''Сведения на | + | Наиболее отработанной версией спецификации к 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|Ю.Т.]] | ||
− | |||
− | |||
− | |||
== Источники == | == Источники == | ||
* Официальные электронные варианты спецификации 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 функций (совершенно минимальная, способная лишь стартовать и завершиться – с использованием первых двух из этого перечня):
- пуск и остановка задачи:
- MPI_Init : инициализация среды исполнения;
- MPI_Finalize : завершение работы среды исполнения;
- получение сведений о задаче и её окружении:
- MPI_Comm_rank : получение информации об числе процессов;
- MPI_Comm_size : получение информации о процессе;
- MPI_Get_processor_name : получение информации о машине, на которой исполняется процесс; эту функцию некоторые авторы не считают необходимой;
- обмен данными с другими частями задачи:
- MPI_Send : передача сообщения;
- MPI_Recv : приём сообщения.
Считается, что зная только эти функции, пользователь может эффективно пользоваться средой MPI и изучать дополнительную функциональность позднее, по потребности.
Некоторые подробности
Важнейшими понятиями MPI являются процесс, процессор и узел (node, host).
Процесс это логический агент (в терминах параллельных вычислений), исполняющий поток команд и имеющий «свой» (доступный) массив (поток) данных. Понятие процессор толкуется в спецификации как аппаратное устройство, которое включает в себя вычисляющий узел, способный исполнять действия заданные в потоке команд (т. е., собственно процессор или ядро или под.). Узел может включать в себя один или более «процессоров», и поддерживать (средствами ОС) исполнение одного или нескольких «процессов».
Соответствие между процессом в понятиях MPI и «реальным» процессом (структурой в ОС) задаётся средой и обычно скрывается от пользователя (прикладного программиста). Для упрощения можно считать соответствие между потоком команд в процессоре (ядре) и процессом MPI таким же, как и для «обычной» задачи в данной ОС. Так, хотя процесс в среде MPI не то же самое, что процесс в ОС UNIX, на практике эти сущности могут быть тождественны (cуществуют и такие воплощения спецификации, в которых один юникс-процесс может «содержать» несколько МПИ-процессов[4]).
Число процессов на узле может быть любым, но практически при пользовании его ограничивают числом процессоров.
Использование многонитевости (multi-threading) в спецификации не оговаривается, но и не запрещается.
— Ю.Т.
Источники
- Официальные электронные варианты спецификации MPI: [1].
- Гропп...
- ↑ В свою очередь, большое количество таких решений объяснялось сравнительно меньшей стоимость
- ↑ Отсюда часто встречаемый в главных исходных модулях MPI-программ блок ветвления: if(rank==0) и т.д.
- ↑ См., напр.: Geist, Kohl, Papadopoulos. PVM and MPI: a Comparison of Features (1996).
- ↑ Ссылка [29] из Гроппа.