Совместное использование MPI и OpenMP на кластерах

advertisement
Совместное использование
MPI и OpenMP на кластерах
Киреев С.Е., Городничев М.А., Калгин К.В., Перепелкин В.А.
Отдел МО ВВС
ИВМиМГ СО РАН
План


Введение в архитектуру: теория
Практические следствия






Привязка процессов к ядрам
Ограничение пропускной способности
памяти узла
Планирование (shedule) обхода данных
несколькими потоками в OpenMP
Использование несколькими потоками
одной кэш-строки
Сравнение производительности MPI и
MPI+OpenMP
Выводы
Отображение процессов MPI на узлы
кластера
MPI-программа
MPI-процессы
Узлы кластера
Отображение процессов MPI на ядра
в узле кластера
0
1
Ядро
Quad core
Xeon E5450
3.0 GHz
(Harpertown)
Ядро
Кэш L2
2
3
Ядро
Ядро
Кэш L2
4
5
Ядро
Ядро
Кэш L2
6
Ядро
7
Ядро
процессы
MPI
узел
кластера
Кэш L2
Шина FSB
Общая память
Кластер МВС-100К (Москва)
Кластер НКС-30Т (Новосибирск)
Реализация в MPI передачи
сообщений
Копирование
данных в памяти
(быстро)
0
Передача данных
по сети
(медленно)
1
2
3
процессы
MPI
Процессы и потоки
Данные
процесса
Поток исполнения 3
Данные
процесса
Поток исполнения 2
Код процесса
Поток исполнения 1
Код процесса
Поток исполнения 0
Многопоточный процесс
Поток исполнения
Однопоточный процесс
Отображение процессов и потоков
на ядра в узле кластера
0
Данные процесса
0
Ядро
Quad core
Xeon E5450
3.0 GHz
(Harpertown)
1
Ядро
Кэш L2
2
3
Ядро
Ядро
Кэш L2
1
Данные процесса
0
Ядро
1
Ядро
Кэш L2
2
Ядро
3
процессы
MPI
Ядро
узел
кластера
Кэш L2
Шина FSB
Данные процесса 0
Данные процесса 1
Общая память
Кластер МВС-100К (Москва)
Кластер НКС-30Т (Новосибирск)
Сравнение процессов MPI и потоков
в узле: первый взгляд

Процессы MPI



Дублирование данных:
 границы подобластей
Затраты на передачу сообщений:
 Сборка данных
 Копирование в другой процесс
 Разборка данных
Потоки (OpenMP)

Затраты на синхронизацию
План


Введение в архитектуру: теория
Практические следствия






Привязка процессов к ядрам
Ограничение пропускной способности
памяти узла
Планирование (shedule) обхода данных
несколькими потоками в OpenMP
Использование несколькими потоками
одной кэш-строки
Сравнение производительности MPI и
MPI+OpenMP
Выводы
Привязка процессов к ядрам

По умолчанию процессы MPI
жестко привязаны к ядрам:
MPI-программа
0
Ядро
1
Ядро
2
Ядро
3
Ядро
4
Ядро
5
Ядро
6
Ядро
7
Ядро
процессы
MPI
узел
кластера
Привязка процессов к ядрам

Следствие 1:

Разные MPI-программы при работе в одном узле
занимают одни и те же ядра


Возможны конфликты двух задач пользователя и задач
разных пользователей кластера. Один из способов
решения – запрашивать узел эксклюзивно.
Незанятые ядра простаивают
MPI-программа 1
0
1
Ядро
2
Ядро
Ядро
MPI-программа 2
3
Ядро
0
Ядро
1
Ядро
2
Ядро
3
Ядро
процессы
MPI
узел
кластера
Привязка процессов к ядрам

Следствие 2:


Все потоки внутри одного процесса
занимают одно ядро
Незанятые ядра простаивают
MPI-программа
0
0
Ядро
1
Ядро
2
Ядро
3
Ядро
1
Ядро
0
1
Ядро
2
Ядро
3
Ядро
процессы
MPI
узел
кластера
Привязка процессов к ядрам

Задача

Решение 2D волнового уравнения с помощью
двухслойной явной схемы



Декомпозиция пространства моделирования
MPI+OpenMP со стандартной привязкой:
Время, с

Сетка: 8000×8000
Объем памяти: 976 MB
90
80
70
60
50
40
30
20
10
0
стандартная привязка
На 8 потоках одно
ядро загружено в 4
раза больше.
MPI:8
MPI:4
MPI:2
MPI:1
OpenMP:1
OpenMP:2
OpenMP:4
OpenMP:8
Привязка процессов к ядрам

Решение проблемы


Использовать средства Linux
 sched_setaffinity(0,sizeof(mask),mask);
Intel MPI (nks-30t) – отключение привязки
 Указать в скрипте запуска переменную
окружения:
export I_MPI_PIN_DOMAIN=node
mpirun …

или указать параметр mpirun:
mpirun –env I_MPI_PIN_DOMAIN node …

MVAPICH (mvs100k) – отключение привязки
 Указать параметр mpirun:
mpirun VIADEV_USE_AFFINITY=0 …
Привязка процессов к ядрам

Задача

Решение 2D волнового уравнения с помощью
двухслойной явной схемы
 Сетка: 8000×8000


Декомпозиция пространства моделирования
Влияние привязки процессов MPI к ядрам:
Время, с

Объем данных: 976 MB
90
80
70
60
50
40
30
20
10
0
стандартная привязка
без привязки
При отключении
привязки OpenMP
дает ожидаемое
ускорение.
MPI:8
MPI:4
MPI:2
MPI:1
OpenMP:1
OpenMP:2
OpenMP:4
OpenMP:8
План


Введение в архитектуру: теория
Практические следствия






Привязка процессов к ядрам
Ограничение пропускной способности
памяти узла
Планирование (shedule) обхода данных
несколькими потоками в OpenMP
Использование несколькими потоками
одной кэш-строки
Сравнение производительности MPI и
MPI+OpenMP
Выводы
Ограничение пропускной
способности памяти узла

Доступ к памяти узла – узкое место

Шина данных не успевает обрабатывать
запросы всех ядер
Ядро
Quad core
Xeon E5450
3.0 GHz
(Harpertown)
Ядро
Кэш L2
!
Ядро
Ядро
Кэш L2
Ядро
Ядро
Кэш L2
Ядро
Ядро
Кэш L2
Шина FSB
Общая память
Кластер МВС-100К (Москва)
Кластер НКС-30Т (Новосибирск)
Ограничение пропускной
способности памяти узла

Попытка преодоления узкого места
при доступе к памяти:


AMD Opteron
Intel Nehalem
Ядро
Quad core
Xeon E5540
2.53 GHz
(Nehalem)
Ядро
Ядро
Ядро
Ядро
Ядро
Ядро
Ядро
Кэш L3
Кэш L3
Общая память
Общая память
Кластер НКС-30Т (Новосибирск) – дополнительные узлы
Ограничение пропускной
способности памяти узла

Задача

Решение 2D волнового уравнения с помощью
двухслойной явной схемы
 Сетка: 8000×8000


Декомпозиция пространства моделирования
8 процессов MPI на разном числе узлов:
25
mvs100k
20
Время, с

Объем данных: 976 MB
nks-30t
15
10
5
0
1
2
Число узлов
4
8
Шина успевает
доставить данные
только для 4 ядер.
Ограничение пропускной
способности памяти узла

Задача

Решение 2D волнового уравнения с помощью двухслойной
явной схемы
Сетка: 8000×8000
Объем данных: 976 MB



nks-30t (Новосибирск, ССКЦ)
60
Эффективность, %
120
50
Время, с

Декомпозиция пространства моделирования
40
30
20
10
0
1
2
4
8
16
Число MPI-процессов
32
100
80
60
40
20
0
1
2
4
8
16
Число MPI-процессов
Видно падение производительности внутри узла.
32
Ограничение пропускной
способности памяти узла
Задача

Решение 2D волнового уравнения с помощью двухслойной
явной схемы



Декомпозиция пространства моделирования
Nehalem (Новосибирск, ССКЦ)
120
10
Число MPI-процессов
16
8
4
1
0
40
20
0
16
20
60
8
30
80
4
40
100
2
50
1
Эффективность, %
60
Время, с

Сетка: 8000×8000
Объем данных: 976 MB
2

Число MPI-процессов
Видно падение производительности внутри узла.
Ограничение пропускной
способности памяти узла

Решение проблемы


Для вычислений по явной схеме

Шаги по
времени
Параметр
реализации
Выполнять больше полезных
вычислений за одно чтение данных
несколько шагов по времени за один проход
Содержимое
кэш-памяти
Ограничение пропускной
способности памяти узла

Задача

Решение 2D волнового уравнения с помощью двухслойной
явной схемы
Сетка: 8000×8000
Объем данных: 976 MB



nks-30t (Новосибирск, ССКЦ)
60
Эффективность, %
120
50
Время, с

Декомпозиция пространства моделирования
40
30
20
10
0
1
2
4
8
16
Число MPI-процессов
32
100
80
60
40
20
0
1
2
4
8
16
32
Число MPI-процессов
Преодолели ограничение на пропускную способность памяти.
Ограничение пропускной
способности памяти узла
Задача

Решение 2D волнового уравнения с помощью двухслойной
явной схемы



Декомпозиция пространства моделирования
Nehalem (Новосибирск, ССКЦ)
120
10
Число MPI-процессов
16
8
4
1
0
40
20
0
16
20
60
8
30
80
4
40
100
2
50
1
Эффективность, %
60
Время, с

Сетка: 8000×8000
Объем данных: 976 MB
2

Число MPI-процессов
Преодолели ограничение на пропускную способность памяти.
План


Введение в архитектуру: теория
Практические следствия






Привязка процессов к ядрам
Ограничение пропускной способности памяти
узла
Планирование (shedule) обхода данных
несколькими потоками в OpenMP
Использование несколькими потоками одной
кэш-строки
Сравнение производительности MPI и
MPI+OpenMP
Выводы
Планирование обхода данных
несколькими потоками в OpenMP

Распределение итераций между
потоками в цикле обхода данных

schedule(static)
Параметры директивы OMP FOR
schedule(static,1)
schedule(dynamic)
schedule(guided)
Пример распределения итераций для 4-х потоков.
Планирование обхода данных
несколькими потоками в OpenMP

Задача:
Решение 2D волнового уравнения с помощью двухслойной
явной схемы


Распределение итераций между потоками в цикле обхода
данных
8 потоков OpenMP в узле
Параметры директивы OMP FOR


16
35
mvs100k
14
nks-30t
20
15
10
8
6
10
4
5
2
0
0
default
Nehalem
12
25
Время, с
Время, с
30
static
static,1 dynamic
guided
default
static
static,1
dynamic
Вывод: нужно использовать static (или не указывать параметр
планирования, что в данной реализации OpenMP эквивалентно static).
Планирование обхода данных
несколькими потоками в OpenMP

Задача:

Последовательный обход массива данных, 8 потоков



Чтение по 3 строки массива
Запись по 1 строке массива
Распределение итераций между потоками в цикле обхода
данных

Время, с

8 потоков OpenMP в узле
Параметры директивы OMP FOR
0,25
Чтение
0,2
Запись
0,15
Основное влияние на
производительность
оказывает чтение
данных по 3 строки.
0,1
0,05
0
default
static
static,1 dynamic guided
static выигрывает за счет эффективного использования кэш-памяти.
План


Введение в архитектуру: теория
Практические следствия






Привязка процессов к ядрам
Ограничение пропускной способности
памяти узла
Планирование (shedule) обхода данных
несколькими потоками в OpenMP
Использование несколькими потоками
одной кэш-строки
Сравнение производительности MPI и
MPI+OpenMP
Выводы
Использование несколькими
потоками одной кэш-строки

Многократное изменение одной кэш-строки
несколькими потоками приводит к
неэффективному использованию кэша.
Оперативная память
Кэш 1
Кэш 2
Ядро 1
Ядро 2
Использование несколькими
потоками одной кэш-строки

Задача


Многократное изменение двух переменных в общей
памяти несколькими потоками
Зависимость времени от расстояния между
переменными:
Разные сокеты
Разный кэш L2
Общий кэш L2
0,9
0,8
Время, мс
0,7
0,6
0,5
0,4
0,3
0,2
0,1
0
0
16 32 48 64 80 96 112 128 144 160 176
Расстояние, байты
Медленнее, если потоки над разными кэшами работают с различными
переменными, расположенными на расстоянии менее 64 B друг от друга.
Использование несколькими
потоками одной кэш-строки

Задача


Моделирование поверхностных химических реакций на
катализаторе
Консервативный алгоритм моделирования дискретнособытийных систем


Счетчики локального времени для каждого потока – часто
обновляют свое значение и читают значения соседних
Текущее состояние генераторов случайных чисел для
каждого потока – часто обновляют свое состояние
Переменные рядом
Время, с
4
Переменные с шагом 64 байта
3,5
3
2,5
2
1,5
1
0,5
0
1
2
4
Число потоков
При разнесении переменных в памяти получаем большее ускорение.
Intel Corei7 920
2.67 GHz
Quad code
План


Введение в архитектуру: теория
Практические следствия






Привязка процессов к ядрам
Ограничение пропускной способности
памяти узла
Планирование (shedule) обхода данных
несколькими потоками в OpenMP
Использование несколькими потоками
одной кэш-строки
Сравнение производительности
MPI и MPI+OpenMP
Выводы
Сравнение MPI и MPI+OpenMP

Задача



Решение 2D волнового уравнения с помощью
двухслойной явной схемы
Декомпозиция пространства моделирования
MPI+OpenMP: сравнение производительности

Использование одного узла
25
mvs100k
nks-30t
12
10
Время, с
20
Время, с
Nehalem
15
10
8
6
4
5
2
0
0
MPI:8
MPI:4
MPI:2
MPI:1
MPI:8
MPI:4
MPI:2
MPI:1
OpenMP:1
OpenMP:2
OpenMP:4
OpenMP:8
OpenMP:1
OpenMP:2
OpenMP:4
OpenMP:8
В одном узле MPI и MPI+OpenMP дают одинаковые
результаты.
На Nehalem 2 и 4 потока на процесс работают
быстрее.
Сравнение MPI и MPI+OpenMP

Задача


mvs100k

Решение 2D волнового уравнения с помощью
двухслойной явной схемы
Декомпозиция пространства моделирования
MPI+OpenMP: сравнение производительности
100
120
8 потоков
60
40
20
Число ядер
На этой задаче MPI лучше, чем MPI+OpenMP.
64
12
8
25
6
51
2
10
24
20
48
40
96
32
0,1
16
0
1
64
12
8
25
6
51
2
10
24
20
48
40
96
32
16
8
4
2
1
4 потока
80
8
Время, с
1
2 потока
4
4 потока
8 потоков
10
1 поток
100
2
2 потока
Эффективность, %
1 поток
Число ядер
Сравнение MPI и MPI+OpenMP
Задача

Моделирование поверхностных химических реакций на
катализаторе
Блочно-синхронный клеточный автомат




Декомпозиция пространства моделирования

MPI+OpenMP: сравнение производительности

mvs100k
Сетка: 4000×4000
Объем данных: 30.5 MB
3500
250
Mcell/s
1 поток
Эффективность, %
1 поток
3000
2 потока
2500
4 потока
2000
8 потоков
1500
1000
500
0
200
2 потока
4 потока
150
8 потоков
100
50
0
1
2
4
8
16
32
64
Число ядер
128 256
512 1024
1
2
4
8
16
32
64
Число ядер
Здесь OpenMP позволяет повысить масштабируемость задачи
с ростом числа используемых узлов.
128
256
512 1024
Выводы



Как в MPI, так и в OpenMP следует
учитывать архитектурные ограничения.
Нет универсального способа сделать
MPI+OpenMP лучше, чем MPI.
Но в классе задач, где коммуникации
преобладают над вычислениями,
использование OpenMP будет иметь
смысл.
Спасибо за внимание
Дополнительные слайды
Постановка задачи

Волновое уравнение:
u
  pu   f
2
t
2
  0  x  a, 0  y  b
u t 0
u

0
t t 0
u x  0  u x  a  u y  0  u y b  0
Постановка задачи

Явная схема:
n 1
i, j
u
uin, j 1
u
n
i , j 1
u
u
n
i 1, j
n
i, j
uin, j 1
uin1, j
uin, j 1
n 1
i, j
 2u  u
n
i, j
 f i , j 
1 
2
2
hy
2hx
u
n
i 1, j
hx hy

3 
hy
4 
n
i , j 1

k 1

hx n
ui 1, j  uin, j
2h y
2hx
 k
 uin, j  pi  1 , j  1  pi  1 , j  1 
2
2
2
2

2 
u
4
 p
i 1 , j 1
2
2
 pi  1
2
, j 1

2

 uin, j  pi  1 , j  1  pi  1 , j  1 
2
2
2
2


hx n
ui , j 1  uin, j  pi  1 , j  1  pi  1 , j  1 
2
2
2
2

2h y
Параметры задачи

Данные задачи
Размер сетки: 8000×8000
 Тип данных: double (8
байт)
 2 массива

Всего: 976 Мбайт

Число шагов: 100
Ограничение пропускной
способности памяти узла

Программа без оптимизации
60
Число MPI-процессов
Число MPI-процессов
512
256
128
0
64
512
256
128
64
32
16
8
4
2
0
20
32
10
40
16
20
60
8
30
80
4
Nehalem
2
40
1
Время, с
nks-30t
mvs100k
nks-30t
Nehalem
100
1
mvs100k
50
Эффективность, %
120
Ограничение пропускной
способности памяти узла

Программа с оптимизацией
Число MPI-процессов
Число MPI-процессов
512
0
256
512
256
128
64
32
16
8
4
2
0
20
128
10
mvs100k
nks-30t
Nehalem
40
64
20
60
32
30
16
40
80
8
Nehalem
100
4
50
nks-30t
2
mvs100k
1
60
Эффективность, %
120
1
Время, с
70
Download