[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