Может кто-то уточнить различия между реализациями MPI OpenMPI и MPICH? Какая из двух является лучшей реализацией?
MPICH против OpenMPI
Ответ 1
Во-первых, важно понять, как разные MPICH и OpenMPI различаются, т.е. они предназначены для удовлетворения различных потребностей. Предполагается, что MPICH будет высококачественной эталонной реализацией последнего стандарта MPI и основой для производных реализаций для удовлетворения особых потребностей. OpenMPI нацелен на общий случай, как с точки зрения использования, так и с сетевыми каналами.
Поддержка сетевых технологий
Одна общая жалоба на MPICH заключается в том, что она не поддерживает InfiniBand, тогда как OpenMPI делает это. Однако MVAPICH и Intel MPI (среди прочего) - оба из которых являются производными MPICH - поддерживают InfiniBand, поэтому, если кто-то хочет определить MPICH как "MPICH и его производные", MPICH имеет чрезвычайно широкую сетевую поддержку, включая InfiniBand и проприетарный такие как Cray Seastar, Gemini и Aries, а также IBM Blue Gene (/L,/P и /Q ). OpenMPI также поддерживает Cray Gemini, но Cray не поддерживается. Совсем недавно MPICH поддерживает InfiniBand через netmod, но MVAPICH2 имеет широкие оптимизации, которые делают его предпочтительной реализацией практически во всех случаях.
Поддержка функций из последнего стандарта MPI
Ортогональная ось для поддержки аппаратного обеспечения/платформы - это охват стандарта MPI. Здесь MPICH находится далеко вперед. MPICH стала первой версией каждого выпуска стандарта MPI от MPI-1 до MPI-3. OpenMPI только недавно поддерживал MPI-3, и я обнаружил, что некоторые функции MPI-3 не работают на некоторых платформах. Кроме того, OpenMPI по-прежнему не имеет целостной поддержки MPI_THREAD_MULTIPLE, что имеет решающее значение для некоторых приложений. Он может поддерживаться на некоторых платформах, но, как правило, нельзя считать, что он работает. С другой стороны, MPICH уже много лет поддерживает целостную поддержку MPI_THREAD_MULTIPLE.
Управление процессами
Одной из областей, где OpenMPI был значительно выше, был менеджер процессов. Старый запуск MPICH (MPD) был хрупким и сложным в использовании. К счастью, он устарел много лет (подробности см. В в разделе FAQ MPICH). Таким образом, критика MPICH, поскольку MPD является ложной. Менеджер процессов Hydra неплох и имеет ту же удобство использования и набор функций, что и ORTE (в OpenMPI).
Сравнение с платформой
Вот моя оценка на платформе:
- Mac OS: как OpenMPI, так и MPICH должны работать нормально. Если вам нужна версия выпуска, поддерживающая все MPI-3 или MPI_THREAD_MULTIPLE, вам, вероятно, потребуется MPICH. Нет абсолютно никаких оснований думать о производительности MPI, если вы работаете на ноутбуке Mac.
- Linux с разделяемой памятью: как OpenMPI, так и MPICH должны работать нормально. Если вам нужна версия выпуска, поддерживающая все MPI-3 или MPI_THREAD_MULTIPLE, вам, вероятно, потребуется MPICH. Я не знаю каких-либо существенных различий в производительности между этими двумя реализациями. Оба поддерживают однократную оптимизацию, если ОС позволяет им.
- Linux с Mellanox InfiniBand: используйте OpenMPI или MVAPICH2. Если вам нужна версия выпуска, поддерживающая все MPI-3 или MPI_THREAD_MULTIPLE, вам нужен MVAPICH2. Я обнаружил, что MVAPICH2 работает очень хорошо, но не сделал прямого сравнения с OpenMPI на InfiniBand, отчасти потому, что функции, для которых производительность играет большую роль для меня (RMA aka one-sided), были разбиты в OpenMPI каждый раз, когда я пытался для их использования.
- Linux с Intel/Qlogic True Scale InfiniBand: у меня нет никакого опыта работы с OpenMPI в этом контексте, но MPI на базе MPICH - это поддерживаемый продукт для этой сети, а MVAPICH2 и Open-MPI также поддерживают его с помощью PSM.
- Linux с Intel Omni Path: у меня в таких системах используются MVAPICH2, Intel MPI, MPICH и Open-MPI, и все они работают. Intel MPI имеет тенденцию к наибольшей оптимизации, в то время как Open-MPI обеспечивает наилучшую производительность реализации с открытым исходным кодом, поскольку они хорошо оптимизированы PSM2 основанный на базе. У меня есть некоторые заметки о GitHub о том, как создавать различные версии с открытым исходным кодом, но такая информация становится довольно устаревшей.
- Cray или IBM суперкомпьютеры: MPI устанавливается на этих машинах автоматически, и в обоих случаях он основан на MPICH. Были демонстрации MPICH на Cray XC40 (здесь), используя OFI, Intel MPI на Cray XC40 (здесь) с использованием OFI, MPICH на Blue Gene/Q с использованием OFI (здесь) и Open-MPI на Cray XC40, используя как OFI, так и uGNI (здесь), но ни один из они поддерживаются поставщиком.
- Windows: я не вижу смысла использовать MPI для Windows, кроме как через виртуальную машину Linux, но как Microsoft MPI, так и Intel MPI поддерживают Windows и основаны на MPICH. Я не видел сообщений об успешных сборках MPICH или Open-MPI, используя Подсистема Windows для Linux.
Примечания
В полной мере я в настоящее время работаю для Intel в области исследований/возможности отслеживания (т.е. я не работаю на каких-либо программных продуктах Intel) и ранее работал в Национальной лаборатории Argonne в течение пяти лет, где я активно сотрудничал с командой MPICH.
Ответ 2
Если вы занимаетесь разработкой, а не производственной системой, перейдите к MPICH. MPICH имеет встроенный отладчик, в то время как Open-MPI не проверяется в последний раз.
В производстве Open-MPI, скорее всего, будет быстрее. Но тогда вы можете изучить другие альтернативы, такие как Intel MPI.
Ответ 3
Я согласен с предыдущим плакатом. Попробуйте оба, чтобы узнать, какое приложение работает быстрее, а затем используйте его для производства. Они оба соответствуют стандартам. Если это ваш рабочий стол, все в порядке. OpenMPI выходит из коробки на Macbook, и MPICH, похоже, больше дружит с Linux/Valgrind. Это между вами и вашей инструментальной цепочкой.
Если это производственный кластер, вам нужно сделать более обширный бенчмаркинг, чтобы убедиться, что он оптимизирован для вашей топологии сети. Конфигурирование его на кластере производства будет основным различием с точки зрения вашего времени, так как вам придется RTFM.
Ответ 4
Оба стандарта совместимы, поэтому не имеет значения, что вы используете с точки зрения правильности. Если не существует какой-либо функции, такой как конкретные расширения отладки, которые вам нужны, тогда сравнивайте оба варианта и выбирайте, что быстрее для ваших приложений на вашем оборудовании. Также учтите, что существуют другие реализации MPI, которые могут обеспечить лучшую производительность или совместимость, такие как MVAPICH (могут иметь лучшую производительность InfiniBand) или Intel MPI (широко поддерживаемые ISV). HP усердно работала над тем, чтобы получить MPI с большим количеством ISV-кодов, но я не уверен, как это происходит после продажи на платформе...