MPI на одной машине DualCore - PullRequest
       24

MPI на одной машине DualCore

5 голосов
/ 25 ноября 2010

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

Ответы [ 2 ]

9 голосов
/ 25 ноября 2010

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

8 голосов
/ 25 ноября 2010

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

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

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

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

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

...