Часовня - Проблемы с мультилокальной конфигурацией подложки GASNET MPI

У меня есть код forall с распределенными итераторами в 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) Похоже, что Chapel использует $OAR_NODEFILE (может быть, и другой) для создания вектора Locales, потому что этот OAR_NODEFILE имеет по одной записи на ядро ​​для каждого узла.

3) Однако, даже если я вручную изменю как $GASNET_NODEFILE, так и $OAR_NODEFILE, вектор локали по-прежнему будет содержать одну запись на ядро ​​для каждого узла ЦП.

4) В кластере, к которому у меня есть доступ, я запускаю mpi-коды следующим образом: mpirun -machinefile $OAR_NODEFILE ~/program. Однако для GASNET требуется синтаксис последней экспортированной переменной.

Может ли кто-нибудь помочь мне настроить среду выполнения для выполнения моего кода в нескольких локалях?

С наилучшими пожеланиями,

Тьяго Карнейро.


person Tiago Carneiro    schedule 03.12.2018    source источник


Ответы (1)


Предполагая, что вы используете выпуск Chapel 1.18 и Open MPI (дайте мне знать, если это не так). В Chapel 1.18 и более ранних версиях была ошибка, из-за которой при использовании Open MPI все экземпляры Chapel сначала упаковывались на один узел. Это было исправлено на мастере (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" в качестве обходного пути.

person Elliot    schedule 03.12.2018
comment
Привет, Эллиот, спасибо. Теперь я могу проводить свои многолокальные эксперименты с использованием MPI. Однако мне пришлось внести следующие изменения в файл MPIRUN_CMD='mpirun --bind-to none --map-by ppr:1:node -np %N -machinefile %H %C'. Я хотел бы отметить одну вещь: официальная документация не содержит информации о том, как настроить портативный канал MPI. Единственная предоставленная информация - GASNET_LAUNCHER=mpirun - приводит к ошибкам компиляции при создании Chapel. Более того, необходимость экспорта MPIRUN_CMD и GASNET_NODEFILE также отсутствует. Еще раз спасибо! - person Tiago Carneiro; 04.12.2018
comment
Хорошая мысль — я открыл github.com/chapel-lang/chapel/issues/ 11771 за улучшение документации. Обратите внимание, что в следующем выпуске вам не нужно будет устанавливать MPIRUN_CMD, это ошибка в выпуске 1.18, которая уже исправлена. - person Elliot; 04.12.2018