Что произойдет, если я запущу программу MPI, для которой требуется 3 узла (например, mpiexec -np 3 ./Program) на одной машине с 2 процессорами?
MPI на одной двухядерной машине
Ответы (2)
Конечно, это зависит от вашей реализации MPI. Скорее всего, он создаст три процесса и будет использовать общую память для обмена сообщениями. Это будет прекрасно работать: операционная система будет распределять два ЦП по трем процессам и всегда выполнять один из готовых процессов. Если процесс ожидает получения сообщения, он блокируется, и операционная система запланирует запуск одного из двух других процессов, один из которых будет тем, который отправляет сообщение.
Мартин дал правильный ответ, и я поставил ему плюс, но я просто хочу добавить несколько тонкостей, которые слишком длинны, чтобы поместиться в поле для комментариев.
Конечно, нет ничего плохого в том, чтобы иметь больше процессов, чем ядер; у вас, вероятно, есть десятки работающих на вашей машине задолго до того, как вы запустите любую программу 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, выполните быстрый поиск, чтобы увидеть, есть ли какие-либо параметры. что нужно настроить для этого случая.