Часовня - Проблемы с мультилокальной конфигурацией подложки GASNET MPI
У меня есть общий код с распределенными итераторами в 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, все процессы выполняются по первой локали.
1.1) Я хотел бы бежать hello6 -nl 4
, так что каждый узел сказал бы привет из локали x, адрес x.address.
2) Похоже, что часовня использует $OAR_NODEFILE
(может быть другой), чтобы создать вектор Locales, потому что это OAR_NODEFILE
имеет одну запись на ядро для каждого узла.
3) Однако, даже если я изменю вручную оба $GASNET_NODEFILE
а также $OAR_NODEFILE
вектор Locale по-прежнему содержит одну запись на ядро для каждого узла ЦП.
4) В кластере, у меня есть доступ, я запускаю коды MPI, как это: mpirun -machinefile $OAR_NODEFILE ~/program
, Однако GASNET требует синтаксиса последней экспортированной переменной.
Может ли кто-нибудь помочь мне настроить среду выполнения для выполнения моего кода в нескольких локалях?
С наилучшими пожеланиями,
Тьяго Карнейро.
1 ответ
Предполагая, что вы используете релиз Chapel 1.18 и Open MPI (дайте мне знать, если это не так). В Chapel 1.18 и более ранних версиях была ошибка, когда при использовании Open MPI все экземпляры Chapel сначала упаковывались в один узел. Это было исправлено на master ( https://github.com/chapel-lang/chapel/pull/11546), и это исправление будет включено в выпуск 1.19.
Вы можете попробовать использовать git master или установить MPIRUN_CMD="mpirun --bind-to none --map-by ppr:1:node -np %N %P %A"
как обходной путь.