2010-07-02 3 views
5

Несколько минут назад я наткнулся на какой-то текст, который напомнил мне о чем-то, что некоторое время размышляло о моем разуме, но мне негде было спросить.Описание OpenMP & MPI

Итак, в надежде, это может быть место, где люди имеют руки на опыт с обоими, мне было интересно, может ли кто-нибудь объяснить в чем разница между OpenMP и MPI?

Я читал статьи в Википедии целиком, понимал их в сегментах, но я все еще размышляю; для программиста Fortran, который желает, чтобы однажды вступил в мир paralellism (просто изучив основы OpenMP сейчас), чем больше надежным способом?

Буду признателен за все ваши комментарии

+0

Fortran не звучит «будущим» для меня ... – Andrey

+7

Люди говорили, что с 80-х годов. Все еще здесь. Все еще важно для научного программирования и численных методов. – duffymo

ответ

10

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

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

Редактировать (в ответ на комментарий): для кластера из 24 машин MPI становится очевидным выбором. Как отмечалось выше (и аналогично комментариям @ Mark) OpenMP предназначен в первую очередь для нескольких процессоров, которые совместно используют память. Когда у вас нет общей памяти, MPI становится четким выбором.

В то же время, предполагая, что вы собираетесь использовать многопроцессорные машины (есть ли что-нибудь еще?), Вы можете использовать OpenMP для распространения нагрузки на каждой машине на всех своих процессорах.

Имейте в виду, однако, что OpenMP, как правило, намного быстрее/проще вводить в эксплуатацию, чем MPI. В зависимости от того, насколько ускоряется вам , необходимо, увеличивая масштаб, а не на выходе (т. Е. На несколько машин с большим количеством процессоров) может сделать разработку программного обеспечения более быстрой/дешевой, что может быть целесообразным, хотя редко дает самую низкую цену за ядро.

+0

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

7

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

Конечно, все (?) Многоядерные ПК и серверы являются системами общей памяти в наши дни, поэтому модель исполнения OpenMP широко применима. MPI имеет тенденцию входить в свои кластеры, на которых процессоры взаимодействуют друг с другом по сети (которая иногда называется межсоединением и часто имеет более высокую спецификацию, чем офисный Ethernet).

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

Однако, если вам нужно использовать больше процессоров, чем вы можете получить в одной коробке (и сколько процессоров, которые постоянно растут), то MPI - ваш лучший выбор. Вы можете также наткнуться на идею гибридного программирования - например, если у вас есть кластер многоядерных ПК, вы можете использовать MPI между ПК и OpenMP на ПК. Я не видел никаких доказательств того, что дополнительная сложность программирования вознаграждается улучшенной производительностью, и я видел некоторые доказательства того, что это определенно не стоит усилий.

И, как уже отмечалось в одном из комментариев, Fortran достаточно надежна для будущего в области параллельных, высокопроизводительных, научных и инженерных приложений. В последнем выпуске стандарта (2008) стандарта используются со-массивы (т.е. массивы, которые сами распределены по системе памяти с нелокальным и локальным доступом) прямо на язык. Есть даже одна или две ранние реализации этой функции. У меня пока нет опыта и ожидайте, что в течение нескольких лет будут проблемы с прорезями.

EDIT, чтобы поднять на несколько пунктов в комментариях Op в ...

Нет, я не думаю, что это плохая идея подойти параллельных вычислений с помощью OpenMP. Я думаю, что OpenMP и MPI (или, точнее, модели параллельных вычислений, которые они реализуют) дополняют друг друга. Я, конечно, пользуюсь обоими, и я подозреваю, что и большинство профессиональных параллельных программистов тоже. Я не делал много OpenMP с момента выхода из университета около 6 лет назад, примерно до 2 лет назад, когда мультикоры действительно начали появляться повсюду. Теперь я, вероятно, делаю примерно одинаковое количество обоих.

С точки зрения вашего дальнейшего (само) образования, я думаю, что книга Использование OpenMP Чапмен и др лучше, чем тот, по Chandra, если только потому, что она является гораздо более актуальной. Я думаю, что книга Chandra предваряет OpenMP 2, а книга Chapman предваряет OpenMP 3, которую стоит изучить.

На стороне MPI книги по Gropp др, Использование MPI и Использование MPI-2 являются обязательными; это, возможно, потому, что они (насколько я нашел) единственные вводные уроки для MPI, а не из-за их превосходства. Я не думаю, что они плохие, заметьте, но у них нет конкуренции. Мне нравится Параллельные научные вычисления в C++ и MPI от Karniadakis и Kirby; в зависимости от вашего уровня знаний в области научных вычислений, хотя вы можете найти слишком много материала.

Но что я думаю, что в поле не хватает целиком (надеюсь, что кто-то может доказать мне неправоту здесь?) - это хороший учебник (или несколько учебников) по разработке программ для параллельного выполнения, что-то, чтобы помочь опытному Fortran (в нашем case) программист делает переход от последовательного к параллельному дизайну программы. Много информации о том, как параллелизировать цикл или гнездо циклов, а не столько о параметрах для параллельных вычислений на структурированных положительных полуопределенных матрицах (или что-то еще). Для такого уровня информации нам приходится вникать в научные статьи (цифровые библиотеки ACM и IEEE стоят скромных годовых затрат - если вы в академическом учреждении, у вашей библиотеки, вероятно, есть подписки на них и многое другое, я «Мне повезло, что мои работодатели платят за членство в профессиональных обществах и надбавки, но если бы я этого не сделал, я бы заплатил за себя).

Что касается ваших планов по созданию новой лаборатории с, скажем, 24 процессорами (процессорами? Или ядрами?, На самом деле не имеет значения, просто спрашивайте), то ваш маршрут должен зависеть от глубины вашего кармана.Если вы можете себе это позволить, я бы предложил:

- Рассмотрите компьютер с общей памятью, конечно, год назад Sun, SGI и IBM могли поставлять систему с общей памятью с таким количеством ядер, я не уверен в текущем состоянии рынка, но так как у вас есть до февраля, чтобы решить, стоит ли заглядывать. Система с разделяемой памятью дает вам параметр параллелизма с разделяемой памятью, которого нет в кластере, а передача сообщений на платформе с общей памятью должна выполняться со скоростью света. (Кстати, если вы идете по этому маршруту, сравнивая этот аспект системы, на компьютерах с общей памятью были некоторые плохие реализации MPI.) Хорошая реализация MPI на компьютере с общей памятью (мой последний опыт в этом был 512-процессорный SGI Altix) не отправляет никаких сообщений, он просто перемещает несколько указателей и, следовательно, быстро растет. Проблема с Altix заключалась в том, что за 128 процессорами шина памяти, как правило, перегружалась всем трафиком; это было время переключиться на MPI на кластере или в поле MPP.

- Опять же, если вы можете себе это позволить, я бы рекомендовал, чтобы системный интегратор предоставил вам рабочую систему и не создавал кластер (или что-то еще). Если, как и я, вы сначала программист и второстепенный системный интегратор, это более простой подход и обеспечит вам рабочую систему, с которой вы можете начать программирование гораздо раньше.

Если вы не можете позволить себе дорогостоящие варианты, то я бы выбрал столько серверов в стойке с 4 или 8 ядрами в коробке (выбор зависит от цены, и, возможно, даже 16 ядер в коробке стоит рассмотреть сегодня), и сегодня я планирую иметь как минимум 4 ГБ оперативной памяти на одно ядро. Тогда вам нужно самое быстрое соединение, которое вы можете себе позволить; GB Ethernet прекрасен, но Infiniband (или другой, чье имя я забыл) является более тонким, хотя скачок цены заметен. И вам понадобится ПК, который будет выступать в качестве головного узла для вашего нового кластера, используя систему управления заданиями и другие вещи. В Интернете есть тонна отличного материала по созданию и запуску кластеров, часто под заголовком Беовульфа, что и было названием того, что считается первым «домашним» кластером.

Теперь, поскольку у вас есть до февраля, чтобы запустить вашу лабораторию, пожарите 2 своих коллег и превратите их компьютеры в мини-Беовульф. Загрузите и установите вероятную MPI-установку (OpenMPI хорош, но есть и другие, чтобы рассмотреть, и ваш o/s может диктовать другой выбор). Теперь вы можете начать готовиться, когда лаборатория готова.

PS Вам не нужно стрелять 2 человек, если вы можете убрать 2 ПК другим способом. И ПК могут быть старыми и неадекватными для использования на рабочем столе, они просто станут платформой для тренинга для вас и ваших коллег (если у вас есть все). Чем они почти идентичны, тем лучше.

+0

Марк, спасибо за действительно хорошо написанный ответ, ясный и понятный.Итак, вы думаете, что мое решение начать с OpenMP «вступать в параллельные начинания» не обязательно является плохим и эксклюзивным, должен ли я когда-нибудь захотеть, или, по необходимости,/по необходимости/расширить свои навыки с помощью MPI? (ps. Я никогда не сомневался в будущей доказательности Фортрана, как кто-то уже сказал «он был мертв в 80-х годах», затем в 90-х, затем в ...;) – Friedrich

+0

Позвольте мне объяснить, почему я спрашивая. На моем рабочем месте есть идея настроить лабораторию. с примерно 24 машинами, в надежде/для решения некоторых вычислений, которые в настоящее время занимают слишком много времени (около 26 часов на одной относительно сильной машине, что является практическим). Итак, один из моих коллег и меня начал изучать параллельные вычисления (никто из нас не имеет опыта работы с паралеллизацией, однако у нас есть довольно сильные фоны fortran, он из f66, я начал с f90, оба успешно работали с функциями 2003 года – Friedrich

+0

), пытаясь узнать как можно больше об упрощенных моделях перед покупкой оборудования. У нас относительно много свободы на этом, в отношении того, куда идти, и бюджета (разумным образом). Я начал с OpenMP не только потому, что он казался несколько более простым, но и потому, что я нашел довольно приятную книгу («Параллельное программирование в OpenMP» от Chandra). Учитывая все это, вы думаете, что, возможно, вы можете предложить еще несколько советов, поскольку из вашего профиля я вижу, что вы довольно переживаете в этой области вычислений. Временное окно, которое у нас есть, примерно до февраля следующего года. – Friedrich

2

Как указано выше, OpenMP - это, безусловно, более простой способ программирования по сравнению с MPI из-за постепенного распараллеливания. OpenMP использовался в основном для мелкозернистого параллелизма (уровень петли), в то время как MPI - более крупнозернистый параллелизм (декомпозиция домена). Оба являются хорошими способами получения параллельной производительности.

У нас есть версии OpenMP и MPI нашего программного обеспечения (Fortran), и клиенты используют их в зависимости от их потребностей.

С современными тенденциями в многоядерной архитектуре гибридный OpenMP-MPI является еще одним жизнеспособным подходом.

Смежные вопросы