Прежде всего, дознакам BSUB
должен предшествовать один знак #
, в противном случае они будут пропущены как обычные комментарии.
Правильный способ запуска гибридного задания с более старыми версиями LSF состоит в том, чтобы передать только запрос на ресурс и запрашивать узлы span
. Для того, чтобы начать работу с 8 MPI процессов и 8 OpenMP нитей каждая, вы должны использовать следующее:
#BSUB -n 8
#BSUB -x
#BSUB -R "span[ptile=2]"
параметры являются следующие:
-n 8
- Запросы на 8 слотов для MPI процессов
-x
- запросы узлов исключительно
-R "span[ptile=2]"
- инструктирует LSF, чтобы охватить работу в течение двух временных интервалов на каждый узел
Вы должны запрашивать узлы исключительно, иначе LSF планирует назначить другие задания тем же узлам, поскольку будет использоваться только два слота на узел.
Затем вы должны установить переменную окружения OMP_NUM_THREADS
в значение 4
(количество ядер на сокет), сообщить библиотеке MPI передать переменную процессам MPI и сделать библиотеку ограничивать каждый процесс MPI собственным гнездом процессора , Это, к сожалению, очень конкретной реализации, например:
Open MPI 1.6.x или старше:
export OMP_NUM_THREADS=4
mpiexec -x OMP_NUM_THREADS --bind-to-socket --bysocket ./program.exe
Open MPI 1.7.x или новее:
export OMP_NUM_THREADS=4
mpiexec -x OMP_NUM_THREADS --bind-to socket --map-by socket ./program.exe
Intel MPI (не уверен, этот, поскольку я не часто использую IMPI):
mpiexec -genv OMP_NUM_THREADS 4 -genv I_MPI_PIN 1 \
-genv I_MPI_PIN_DOMAIN socket -genv I_MPI_PIN_ORDER scatter \
./program.exe