Управляйте MPI, чтобы думать, что я работаю на двух узлах - PullRequest
1 голос
/ 15 октября 2019

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

Я использую Intel MPI на компьютере с Linux

1 Ответ

0 голосов
/ 15 октября 2019

«Узлы» в MPI (обычно называемые «рангами») не обязательно должны соответствовать физическим вычислительным узлам. Фактически, может быть даже полезно запускать несколько процессов MPI («рангов») для каждого физического узла. В Руководстве по настройке HPC для AMD EPYC приведены некоторые рекомендации для их процессоров. Например, Intel MPI использует параметр -ppn для настройки количества процессов на узел .

* 1007. * При этом: если вам просто нужно запустить приложение на двух рангах MPI на вашем хосте, то обычно просто набрать
$ mpirun -n 2 your-app.x

, чтобы получить два ранга на вашем локальном компьютере (так как большинство MPIРеализации предварительно настраивают слоты, равные количеству физических процессоров на вашем хосте). Независимо от того, являются они локальными или нет, реализация MPI выберет подходящий способ связи для этих двух процессов.

В случае, если mpirun явно требуется хост, используйте:

$ mpirun -host localhost -n 2 your-app.x

С дополнительными опциями для mpirun (см. Справочную документацию) вы даже можете закрепить процессы MPI на определенных процессорах, хотя реализация MPI и ОС обычно распределяют их достаточно хорошо для тестовых запусков.

Если вам действительно нужно, чтобы mpirun обрабатывал ваш единственный хост как два узла, вы можете использовать тот факт, что в Linux полная подсеть 127.0.0.x отображается на ваш локальный хост и объединяет опции -host и -ppn. С программой MPI helloworld по умолчанию это выглядит так:

$ FI_PROVIDER=tcp mpiexec -ppn 2 -hosts 127.0.0.1,127.0.0.2 ./helloworld
Hello world from processor myhost, rank 1 out of 4 processors
Hello world from processor myhost, rank 3 out of 4 processors
Hello world from processor myhost, rank 0 out of 4 processors
Hello world from processor myhost, rank 2 out of 4 processors

Разрешение внутреннего имени хоста, к сожалению, дает вам всегда одно и то же имя процессора, но тот факт, что вы получаете 4 ранга при запросе двух процессоров на узел, показывает, что этоработает в соответствии с запросом.

FI_PROVIDER Я должен был указать, чтобы обойти проблему в последней версии Intel MPI .

Кстати, это не относится к Fortran.

...