Постановка программ в очередь написанных с использованием стандарта OpenMP

Для постановки в очередь программ, написанных с использованием только стандарта OpenMP можно использовать скрипт mpisubmit.pl c параметром -p равным 1 и параметром -t равным числу нитей. Однако в силу особенностей реализации, если запрашиваемое число нитей больше 8, то параметр p должен быть кратен 4, а запрашиваемые ядра для задачи будут распределены между вычислительными узлами.

Если тем не менее нужно использовать более 8 потоков на одном вычислительном узле, то можно воспользоваться следующим командным файлом (назовем его OpenMP_job.lsf):

#BSUB -n M
#BSUB -W 00:15
#BSUB -o "my_job.%J.out"
#BSUB -e "my_job.%J.err"
#BSUB -R "span[hosts=1]"
OMP_NUM_THREADS=N ./my_job

Здесь параметр N указывает число OpenMP нитей и не может быть больше 160. А параметр M число запрашиваемых ядер и рассчитывается исходя из того, что возможно 8 потоков на одно ядро, т.е. M = [N/8]+1.

Здесь и далее не поясняются параметры, используемые в командных файлах более подробно об этом смотрите в разделах постановка заданий в очередь и постановка заданий в очередь с использованием командного файла

Напомним, что в этом случае постановка в очередь осуществляется:
 bsub < OpenMP_job.lsf

Если необходимо привязать OpenMP нить к ядру, то есть чтобы каждое ядро использовало только один поток, то можно использовать следующий командный файл:

    #BSUB -J "OpenMP_job"
    #BSUB -o "OpenMP_job%J.out"
    #BSUB -e "OpenMP_job%J.err"
    #BSUB -R "affinity[core(N)]"
    /polusfs/lsf/openmp/launchOpenMP.py ./Job_OMP

Здесь N число потоков, чтобы оставаться в рамках одного вычислительного узла, оно не должно быть больше числа ядер в узле. Нет необходимости устанавливать переменную OMP_NUM_THREADS она установиться автоматически. Для корректной привязки потока к ядру используется специальный скрипт launchOpenMP.py.

Если нужно использовать больше потоков на ядро, то тогда мы выставляем переменную OMP_NUM_THREADS как это указано в следующем примере:

    #BSUB -J "OpenMP_job"
    #BSUB -o "OpenMP_job%J.out"
    #BSUB -e "OpenMP_job%J.err"
    #BSUB -R "affinity[core(4)]"
    OMP_NUM_THREADS=8 
    /polusfs/lsf/openmp/launchOpenMP.py ./Job_OMP 

Здесь используются 4 ядра и 8 OpenMP потоков.

Если есть необходимость привязать поток непосредственно к потоку процессора, то делается это следующим образом:

    #BSUB -J "OpenMP_job"
    #BSUB -o "OpenMP_job%J.out"
    #BSUB -e "OpenMP_job%J.err"
    #BSUB -R "affinity[cpu(N)]"
    /polusfs/lsf/openmp/launchOpenMP.py ./Job_OMP 

Здесь N как и раньше означает число OpenMP потоков и не может быть больше числа процессоров.