Для постановки в очередь гибридных программ, написанных с использованием только стандартов MPI и OpenMP можно использовать скрипт mpisubmit.pl
c параметром -p равным числу MPI процессов и параметром -t равным числу нитей. Однако в силу особенностей реализации, если запрашиваемое число нитей больше 8, то параметр p должен быть кратен 4, а запрашиваемые ядра для задачи будут распределены между вычислительными узлами равномерно.
#BSUB -n M #BSUB -W 00:15 #BSUB -o "my_job.%J.out" #BSUB -e "my_job.%J.err" OMP_NUM_THREADS=N mpiexec ./my_job
Здесь параметр N
указывает число OpenMP нитей на один MPI процесс. Поскольку процессоры power8 имеют ядра в 8 потоков, значение данного параметра разумно задавать не больше 8, но разумеется возможно использование больших значений параметра N
. Параметр M
задает число запрашиваемых ядер и равно числу запрашиваемых MPI-процессов.
Здесь и далее не поясняются параметры, используемые в командных файлах более подробно об этом смотрите в разделах постановка заданий в очередь
и постановка заданий в очередь с использованием командного файла
Если необходимо привязать OpenMP нить к ядру, то есть чтобы каждое ядро использовало только один поток в MPI процессе, то можно использовать следующий командный файл:
#BSUB -n M #BSUB -J "my_job" #BSUB -o "my_job%J.out" #BSUB -e "my_job%J.err" #BSUB -R "affinity[core(N)]" mpiexec ./my_job
Здесь N число потоков, чтобы оставаться в рамках одного вычислительного узла, оно не должно быть больше числа ядер в узле. М как и раньше число MPI процессов. Произведение чисел m на n не может быть больше общего числа ядер (80). Нет необходимости устанавливать переменную OMP_NUM_THREADS
она установиться автоматически.
Если нужно использовать больше потоков на ядро, то тогда мы выставляем переменную OMP_NUM_THREADS
как это указано в следующем примере:
#BSUB -n 3 #BSUB -J "my_job" #BSUB -o "my_job%J.out" #BSUB -e "my_job%J.err" #BSUB -R "affinity[core(4)]" OMP_NUM_THREADS=8 mpiexec ./my_job
Здесь используются 3 MPI процесса, а каждый MPI процесс задействует 4 ядра и 2 OpenMP потока на ядро.