Прежде всего, перед часовыми 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 своим собственным сокетом ЦП. К сожалению, это очень зависит от реализации, например:
Откройте MPI 1.6.x или старше:
export OMP_NUM_THREADS=4
mpiexec -x OMP_NUM_THREADS --bind-to-socket --bysocket ./program.exe
Откройте 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
person
Hristo Iliev
schedule
09.06.2015