Мартин дал правильный ответ, и я добавил ему +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, выполните быстрый поиск, чтобы увидеть, есть ли любые параметры, которые должны быть настроены для этого случая.