Ответ 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.