Часовня - Проблемы с мультилокальной конфигурацией подложки 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" как обходной путь.

Другие вопросы по тегам