2010-11-24 5 views
4

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

+0

Могу ли я предложить удаление «параллелизма» в качестве тега? MPI дает вам параллельное выполнение, но без параллелизма в том смысле, что вы можете написать веб-сервер, скажем, с ним. – 2010-11-24 22:47:05

ответ

8

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

+0

Но скажу, что я хочу, чтобы три процесса были как можно более независимыми, и обмениваются сообщениями только через передачу сообщений. В идеале тогда мне понадобится машина с 3 cpus, не так ли? В качестве реализации MPI я использую MPICH2. – Rich 2010-11-24 23:05:39

+0

Неправильно. Процессы будут независимы уже на двух процессорах. Операционная система будет просто планировать их; каждый получит 66% от одного процессора. Если они не блокируют ожидание сообщений, они будут запускать «полную скорость» (это означает, что они будут держать оба процессора в полной нагрузке и делать все индивидуальные действия). – 2010-11-24 23:19:29

7

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

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

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

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

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

Смежные вопросы