2013-07-01 3 views
3

Предположим, что у меня есть код, который работает на 384 процессах MPI (24 вычислительных узла с 16 ядрами на каждый вычислительный узел) и использует следующий простой скрипт для отправки моей работы в очередь заданийНазначить различное количество потоков openmp для каждого процесса mpi

#!/bin/bash 
#PBS -S /bin/bash 
#PBS -l nodes=24:ppn=16 
#PBS -l walltime=01:00:00 

cd $PBS_O_WORKDIR 
module load openmpi 
mpirun mycode > output_file 

возможен следующий сценарий: мне нужно назначить еще один узел с 16 ядрами, чтобы сделать какие-то конкретные расчеты с использованием «OpenMP» и обновляет остальные 384 процессов в какой-то момент с результатами вычислений. Итак, теперь у меня есть 384 MPI-процессов с одним потоком, выполняемым последовательно в каждом и одном MPI-процессе с 16 нитями openmp.

Можно ли выполнить это с помощью OMP_NUM_THREADS и mpirun или любых других инструментов?

Я ценю любые предложения

Спасибо

Сина

ответ

4

Вы можете запросить 25 узлов с 16 ppns, а затем принудительно только 385 MPI процессов:

#PBS -l nodes=25:ppn=16 
... 
mpirun -np 384 mycode : -np 1 -x OMP_NUM_THREADS=16 mycode > output_file 

Это использует MPMD режим запуска Open MPI с различными конфигурациями запуска, разделенных двоеточиями. Поскольку по умолчанию ряды заполняются последовательно над слотами узла, первые 384 рангов будут охватывать ровно 24 узла, тогда дополнительный ранг начнет работу на самом последнем узле. Для него переменная среды OMP_NUM_THREADS получит значение 16, что позволит использовать 16 потоков OpenMP. Если программа OpenMP является другим исполняемым файлом, просто подставьте его имя во второй конфигурации запуска, например .:

mpirun -np 384 mycode : -np 1 -x OMP_NUM_THREADS=16 myompcode > output_file 
+0

Спасибо за помощь именно то, что мне было нужно, –

+0

Для MPICH '-x' должен быть' -env'. – Armut

Смежные вопросы