[mephi-hpc] Hybrid MPI + OpenMP
anikeev
anikeev at ut.mephi.ru
Thu Sep 22 14:04:31 MSK 2016
On Sun, 2016-09-18 at 13:34 +0300, Волков Юрий Николаевич wrote:
Здравствуйте!
> Уважаемые коллеги, обращаюсь за помощью к более опытным товарищам.
> Пытаюсь ускорить решение своей задачи, используя совмещенную схему
> распараллеливания по MPI и OpenMP. Вкратце, решается трехмерная
> стационарная задача переноса нейтронов итерационным методом верхней
> точечной релаксации (метод Гаусс-Зейделя). Я разбиваю пространство по
> высоте на слои (MPI), а внутри слоев логично и наиболее проще сделать
> распараллеливание цикла по OpenMP.
> Используется ферма Basov. Само по себе, в отдельности MPI и
> OpenMP работают нормально. Например внутри одно нода (думаю, это
> синоним вычислительного узла) на 1 процесс MPI число нитей (threads)
> 2 и 4 дает соответственно увеличение скорости расчета на 13 и 37%.
> Опять же на одном ноде использование двух процессов MPI и 4 нитей
> соответственно дает увеличение скорости счета в 2.5 раза. Опытным
> путем выяснил, что использование большего числа нитей эффект не дает.
> однако, когда использую два нода с тем же числом MPI процессов
> эффективность гибридной схемы резко падает и даже скорость счета
> возрастает.
> По идее использование Open MP имеет смысл, когда нити сидят на
> одной памяти (SMP), ну и впечатление, когда идет расчет на несколько
> вычислительных узлах, то система не связывает OpenMP нити эффективно.
>
> скрипт с запросом ресурсов (2 MPI процесса на каждый вычислительный
> узел, каждый процесс рождает 4 нити OpenMP) в выглядит таким образом:
>
> #PBS -l nodes=2:ppn=16,walltime=00:00:30
>
> cd ~/space
>
> export OMP_NUM_THREADS=4
>
> mpirun -npernode 2 -cpus-per-proc 4 -np 4 ./hybrid.out
>
>
> Надеюсь, кто нибудь подскажет идею.
Насколько я понял, у Вас смешанная (гибридная) задача MPI+OpenMP
показывает падение производительности при использовании одинакового
количества потоков на двух узлах (нодах), вместо одного. Так и должно
быть. Дочерние по отношению к потоку MPI подпотоки OpenMP имеют доступ
к общей памяти только друг меду другом внутри одного родительского
потока MPI. Доступа к общей памяти подпотоков OpenMP другого потока MPI
у них нет в принципе:
/OpenMP11 \
MPI1 | SMP1
/ \OpenMP12 /
KNEM,
Network
\ /OpenMP21 \
MPI2 | SMP2
\OpenMP22 /
Взаимодействие между MPI потоками происходит исключительно по протоколу
MPI.
Когда Вы запускаете все потоки MPI на одном узле, MPI-сообщения
пересылаются через общую память этого узла (технология KNEM. К OpenMP
не имеет никакого отношения), а когда на разных - через реальную сеть,
что вызывает задержки.
Обращаю Ваше внимание, что кластер Басов использует сеть стандарта
Ethernet 10 Gbps и предназначен в первую очередь для запуска задач со
слабым сетевым взаимодействием. Для задач с сильным сетевым
взаимодействием лучше использовать кластер Черенков, который построен
на основе сети Infiniband FDR 56 Gbps.
> С уважением,
> ст. преп. каф. 5 НИЯУ МИФИ
> Юрий Волков
> _______________________________________________
> hpc mailing list
> hpc at lists.mephi.ru
> https://lists.mephi.ru/listinfo/hpc
--
С уважением,
аспирант кафедры 4 МИФИ,
инженер отдела Unix-технологий,
Аник
еев Артём.
Тел.: 8 (495) 788-56-99, доб. 8998
More information about the hpc
mailing list