Вопрос

Мне нужно реализовать систему MPI в кластере.Если кто-нибудь здесь имеет опыт работы с MPI (MPICH/OpenMPI), я хотел бы знать, что лучше и как можно повысить производительность в кластере блоков x86_64.

Это было полезно?

Решение

MPICH существует гораздо дольше.Он чрезвычайно портативен, и в Интернете вы найдете многолетние советы и подсказки.Это беспроигрышный вариант, и он, вероятно, совместим с другими программами MPI.

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

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

Другие советы

Я написал довольно много параллельных приложений для кластеров Windows и Linux и могу сообщить вам, что на данный момент MPICH2, вероятно, является более безопасным выбором.Как упоминает другой респондент, это очень зрелая библиотека.Кроме того, существует обширная поддержка вещания (через MPI_Bcast) сейчас, и на самом деле, MPICH2 имеет немало действительно хороших функций, таких как разбрасывать и собирать.

Однако OpenMPI набирает обороты.Компания Penguin Computing (они являются крупным поставщиком кластеров и им нравится Linux) на самом деле имеет несколько действительно сильных тестов, в которых OpenMPI в определенных обстоятельствах превосходит MPICH2.

Что касается вашего комментария о «повышении производительности», лучший совет, который я могу дать, — никогда не отправлять больше данных, чем абсолютно необходимо, если вы ограничены вводом-выводом, и никогда не выполнять больше работы, чем необходимо, если вы ограничены процессором.Я не раз попадал в ловушку, оптимизируя не тот фрагмент кода :) Надеюсь, вы не пойдете по моим стопам!

Посетите форумы MPI - там много хорошего. информация о процедурах MPI, и Беовульф на сайте есть ответы на множество интересных вопросов.

«Лучше» трудно определить...На вопрос «Быстрее» можно ответить, сравнив его с вашим кодом и вашим оборудованием.Такие вещи, как коллективная оптимизация и оптимизация разгрузки, будут зависеть от вашего конкретного оборудования, а также весьма различаются в зависимости от версий стека драйверов, Google сможет найти вам рабочие комбинации.

Что касается работы по оптимизации, то это в некоторой степени зависит от кода, а в некоторой степени от железа.

Привязан ли ввод-вывод вашего кода к хранилищу?В этом случае может очень помочь исследование чего-то лучшего, чем NFS, или использование ввода-вывода MPI вместо простого параллельного ввода-вывода.

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

Разделение трафика ввода-вывода и MPI может иметь большое значение в некоторых кластерах, особенно в кластерах Gigabit Ethernet.

Мы использовали mpich просто потому, что он казался наиболее доступным и лучше документированным, мы не приложили особых усилий к тестированию альтернатив.MPICH имеет разумные инструменты для развертывания в Windows.
Основная проблема с производительностью, с которой мы столкнулись, заключалась в том, что нам нужно было отправлять одни и те же базовые данные на все узлы, а MPICH не поддерживает (или не поддерживал) широковещательную передачу, поэтому развертывание исходных данных было O (n).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top