Объяснение OpenMP & MPI

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

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

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

Я был бы благодарен на всех Ваших комментариях

5
задан Friedrich 2 July 2010 в 15:06
поделиться

2 ответа

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

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

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

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

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

10
ответ дан 18 December 2019 в 07:53
поделиться

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

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

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

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

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

ИЗМЕНИТЬ , чтобы уловить ряд моментов в комментариях OP ...

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

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

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

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

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

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

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

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

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

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

8
ответ дан 18 December 2019 в 07:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: