MPI на одной двухядерной машине

Что произойдет, если я запущу программу MPI, для которой требуется 3 узла (например, mpiexec -np 3 ./Program) на одной машине с 2 процессорами?


person Rich    schedule 24.11.2010    source источник
comment
Могу ли я предложить удалить параллелизм в качестве тега? MPI дает вам параллельное выполнение, но не параллелизм в том смысле, что вы можете написать веб-сервер, скажем, с ним.   -  person I GIVE CRAP ANSWERS    schedule 25.11.2010


Ответы (2)


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

person Martin v. Löwis    schedule 24.11.2010
comment
Но скажем, я хочу, чтобы три процесса были как можно более независимыми и взаимодействовали только посредством передачи сообщений. В идеале мне нужна машина с 3 процессорами, верно? В качестве реализации MPI я использую MPICH2. - person Rich; 25.11.2010
comment
Неправильно. Процессы будут независимыми уже на двух процессорах. Операционная система просто запланирует их; каждый получит 66% от одного ЦП. Если они не заблокируют ожидание сообщений, они будут работать на полной скорости (это означает, что они будут поддерживать полную загрузку обоих ЦП и выполнять все индивидуальные действия). - person Martin v. Löwis; 25.11.2010
comment
Предположение о том, что ОС отменит планирование процесса при блокирующей операции отправки/получения, не всегда верно. Некоторые реализации MPI ведут себя таким образом, а некоторые — нет, обычно из соображений производительности. Например, стандартная сборка текущей версии MPICH2 не будет блокироваться (в смысле ОС) блокирующей операции MPI. - person Dave Goodell; 29.11.2010

Мартин дал правильный ответ, и я поставил ему плюс, но я просто хочу добавить несколько тонкостей, которые слишком длинны, чтобы поместиться в поле для комментариев.

Конечно, нет ничего плохого в том, чтобы иметь больше процессов, чем ядер; у вас, вероятно, есть десятки работающих на вашей машине задолго до того, как вы запустите любую программу MPI. Вы можете попробовать с любым исполняемым файлом командной строки, который у вас есть, например, mpirun -np 24 hostname или mpirun -np 17 ls в Linux, и вы получите 24 копии вашего имени хоста или 17 (возможно, чередующихся) списков каталогов, и все работает нормально.

В MPI использование большего количества процессов, чем ядер, обычно называется «переподпиской». Тот факт, что у него особое имя, уже говорит о том, что это особый случай. Программы, написанные с помощью MPI, обычно работают лучше всего, когда каждый процесс имеет собственное ядро. Есть ситуации, когда это не обязательно, но это (безусловно) обычное дело. И по этой причине, например, OpenMPI оптимизирован для обычного случая - он просто делает сильное предположение, что каждый процесс имеет свое собственное ядро, и поэтому очень агрессивно использует ЦП для опроса, чтобы увидеть, пришло ли сообщение. пока (поскольку он считает, что больше ничего важного не делает). Это не проблема, и его можно легко отключить, если OpenMPI знает о переподписке ( http://www.open-mpi.org/faq/?category=running#oversubscribeing ). Это проектное решение, которое улучшает производительность в подавляющем большинстве случаев.

По историческим причинам я больше знаком с OpenMPI, чем с MPICH2, но я понимаю, что значения по умолчанию для MPICH2 более снисходительны к случаю переподписки, но я думаю, что даже здесь можно включить более агрессивное ожидание занятости.

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

person Jonathan Dursi    schedule 25.11.2010
comment
Спасибо вам, ребята. Это проясняет мои сомнения. - person Rich; 27.11.2010
comment
Канал по умолчанию в MPICH2 (ch3:nemesis) в настоящее время не очень хорошо поддерживает переподписку, хотя улучшенная поддержка запланирована на будущее. Если вместо этого вы сконфигурируете MPICH2 с ch3:sock, переподписка не должна быть проблемой, но общая память не будет использоваться для связи внутри узла. Соответствующая запись часто задаваемых вопросов: wiki.mcs.anl.gov/ mpich2/index.php/ - person Dave Goodell; 29.11.2010