У меня есть общий код с распределенными итераторами в Chapel, и я пытаюсь запустить его на кластере.
Код отлично работает при использовании канала UDP.
Теперь я пытаюсь использовать переносимый MPI в качестве внутреннего слоя - безуспешно.
Вот моя конфигурация:
export CHPL_TASKS=qthreads
export CHPL_COMM=gasnet
export CHPL_COMM_SUBSTRATE=mpi
export CHPL_LAUNCHER=gasnetrun_mpi
только с этой конфигурациейбыл использован только один узел.Глядя на документацию Gasnet, я добавил:
export GASNET_NODEFILE="$(pwd)"/nodes
export MPIRUN_CMD='mpirun -np %N -machinefile %H %C'
(эти данные отсутствуют в официальной документации).
Хорошо, теперь я могу запускать код Chapel с использованием MPI.НО:
1) Каждый узел имеет 32 ядра.Если я поставлю hello6 -nl x
, x <33, все процессы будут выполняться по первой локали.</p>
1.1) Я хотел бы запустить hello6 -nl 4
, поэтому каждый узел скажет привет из локали x, адрес x.address.
2) Похоже, что Chapel использует $OAR_NODEFILE
(возможнодругое) создать вектор Locales, потому что у этого OAR_NODEFILE
есть одна запись на ядро для каждого узла.
3) Однако, даже если я изменю вручную, и $GASNET_NODEFILE
, и $OAR_NODEFILE
, вектор Locale по-прежнему будет содержать одну запись на ядро для каждого узла ЦП.
4) В кластере, к которому у меня есть доступ, я запускаю mpi-коды, например: mpirun -machinefile $OAR_NODEFILE ~/program
.Однако GASNET требует синтаксиса последней экспортированной переменной.
Может ли кто-нибудь помочь мне настроить среду выполнения для выполнения моего кода в нескольких локалях?
С уважением,
Tiago Carneiro.