Другое мнение, не противоречащее уже написанному @Jerry, заключается в том, что OpenMP предназначен для распараллеливания с общей памятью, а MPI - для распараллеливания с распределенной памятью.Эмуляция разделяемой памяти в распределенных системах редко бывает убедительной или успешной, но вполне разумно использовать MPI в системе с разделяемой памятью.
Конечно, все (?) Многоядерные ПК и серверы являются разделяемой памятью.системы в наши дни, поэтому модель исполнения для OpenMP широко применима.MPI имеет тенденцию вступать в свои права на кластеры, в которых процессоры обмениваются данными друг с другом по сети (которая иногда называется межсоединением и часто имеет более высокую спецификацию, чем офисный Ethernet).
С точки зрения приложений IПо оценкам, значительная доля параллельных программ может быть успешно реализована с использованием OpenMP или MPI и что ваш выбор между ними, вероятно, лучше всего зависит от наличия аппаратного обеспечения.Большинство из нас (параллельщики) считают OpenMP более легким для доступа, чем MPI, и, конечно, (я утверждаю) легче постепенно распараллелить существующую программу с OpenMP, чем с MPI.
Однако, если вывам нужно использовать больше процессоров, чем вы можете получить в одном корпусе (и сколько процессоров неуклонно растет), тогда MPI - ваш лучший выбор.Вы также можете наткнуться на идею гибридного программирования - например, если у вас есть кластер многоядерных ПК, вы можете использовать MPI между ПК и OpenMP на ПК.Я не видел никаких доказательств того, что дополнительная сложность программирования вознаграждается улучшением производительности, и я видел некоторые доказательства того, что это определенно не стоит усилий.
И, как уже было сказано в одном из комментариевзаявил, что я думаю, что Fortran достаточно перспективен в области параллельных, высокопроизводительных, научных и инженерных приложений.Последняя (2008 г.) редакция стандарта включает в себя совместные массивы (т.е. массивы, которые сами распределены по системе памяти с нелокальным и локальным доступом) прямо в язык.Есть даже одна или две ранние реализации этой функции.У меня пока нет опыта их использования, и я ожидаю, что в течение нескольких лет будут возникать проблемы с прорезыванием зубов.
РЕДАКТИРОВАТЬ , чтобы поднять ряд моментов в комментариях ОП ...
Нет, я не думаю, что это плохая идея - подходить к параллельным вычислениям через OpenMP.Я думаю, что OpenMP и MPI (или, точнее, модели параллельных вычислений, которые они реализуют) дополняют друг друга.Я, конечно, использую оба, и я подозреваю, что большинство профессиональных параллельных программистов тоже.Я почти не занимался OpenMP с тех пор, как ушел из университета около 6 лет назад, до тех пор, пока около 2 лет назад многоядерные сети не начали появляться везде.Теперь я, вероятно, делаю примерно одинаковое количество обоих.
С точки зрения вашего дальнейшего (самообразования), я думаю, что книга Использование OpenMP Чепмена и др. лучше, чем у Чандры, хотя бы потому, что он намного более современный.Я думаю, что книга Чандра предшествует OpenMP 2, а книга Чепмена предшествует OpenMP 3, которую стоит изучить.
Со стороны MPI книги Gropp et al , Использование MPI и Использование MPI-2 являются обязательными;возможно, это потому, что они (насколько я обнаружил) являются единственным учебным введением в MPI, а не из-за их превосходства.Я не думаю, что они плохие, заметьте, но у них нет большой конкуренции.Мне также нравятся Parallel Scientific Computing в C ++ и MPI от Karniadakis и Kirby;в зависимости от вашего уровня научных знаний в области вычислительной техники, хотя вы можете найти большую часть материала слишком простой.
Но я думаю, что в этой области совершенно не хватает (надеюсь, кто-то может доказать, что я здесь не прав?) Хороший учебник (или несколько учебников) по разработке программ для параллельного выполнения, что-то, что поможет опытному Фортрану (в нашем случае ) программист совершает переход от последовательной к параллельной разработке программы. Много информации о том, как распараллелить цикл или гнездо циклов, не так много о возможностях распараллеливания вычислений на структурированных положительных полуопределенных матрицах (или как угодно). Для такого уровня информации нам нужно довольно много копаться в научных статьях (цифровые библиотеки ACM и IEEE вполне стоят умеренных ежегодных затрат - если вы находитесь в академическом учреждении, ваша библиотека, вероятно, имеет подписку на них и многое другое, я Мне повезло, что мои работодатели платят за членство в моем профессиональном обществе и надстройки, но если бы они этого не делали, я бы сам заплатил).
Что касается ваших планов относительно новой лаборатории, скажем, с 24 процессорами (процессорами? Или ядрами?), То это не имеет значения, просто спрашивая), тогда выбранный вами маршрут должен зависеть от глубины вашего кармана. Если вы можете себе это позволить, я бы предложил:
- Рассмотрим компьютер с разделяемой памятью. Конечно, год назад Sun, SGI и IBM могли поставлять системы с разделяемой памятью с таким количеством ядер, я не уверен в текущем состоянии рынка, но так как у вас есть до февраля, чтобы решить, стоит ли изучать. Система с общей памятью дает вам возможность параллелизма с общей памятью, чего нет у кластера, и передача сообщений на платформе с общей памятью должна выполняться с небольшой скоростью. (Кстати, если вы пойдете по этому пути, сравните этот аспект системы, на компьютерах с общей памятью были некоторые плохие реализации MPI.) Хорошая реализация MPI на компьютере с общей памятью (мой последний опыт этого был на процессор 512 (SGI Altix) не отправляет никаких сообщений, он просто перемещает несколько указателей и, следовательно, невероятно быстро. Проблема с Altix заключалась в том, что за 128 процессорами шина памяти была перегружена всем трафиком; это было время, чтобы переключиться на MPI в кластере или окне MPP.
- Опять же, если вы можете себе это позволить, я бы порекомендовал системному интегратору предоставить вам работающую систему и избегать создания кластера (или чего-либо еще) самостоятельно. Если, как и я, вы в первую очередь программист, а во втором - неохотный системный интегратор, это более простой подход, и вы получите работающую систему, на которой вы сможете начать программирование гораздо раньше.
Если вы не можете позволить себе дорогие варианты, то я бы выбрал столько стоечных серверов с 4 или 8 ядрами на коробку (выбор зависит от цены, и, возможно, сегодня стоит рассмотреть даже 16 ядер на коробку) и сегодня я планирую использовать как минимум 4 ГБ ОЗУ на ядро. Тогда вам нужно самое быстрое соединение, которое вы можете себе позволить; С Ethernet GB все в порядке, но Infiniband (или другой, чье имя я забыл) лучше, хотя скачок цен заметен. И вам понадобится ПК, который будет выступать в качестве головного узла для вашего нового кластера, работать с системой управления заданиями и выполнять другие действия. В интернете содержится масса отличных материалов по созданию и запуску кластеров, часто под заголовком «Беовульф», который был названием того, что считается первым «доморощенным» кластером.
Теперь, так как у вас есть до февраля, чтобы запустить свою лабораторию, уволить 2 ваших коллег и превратить их ПК в мини-Беовульф. Загрузите и установите вероятную установку MPI (OpenMPI - это хорошо, но есть и другие, которые стоит рассмотреть, и ваши операции могут потребовать другого выбора). Теперь вы можете начать готовиться к тому, когда лаборатория будет готова.
PS Вам не нужно увольнять 2 человек, если вы можете собрать 2 компьютера другим способом. А ПК могут быть старыми и неадекватными для настольного использования, они просто станут платформой для обучения для вас и ваших коллег (если у вас есть еще). Чем более они идентичны, тем лучше.