Отчет по тестированию кластера HP BladeSystem c7000

advertisement
Отчет
по тестированию кластера HP BladeSystem c7000
Руководитель:
Малышкин В.Э.
Исполнители:
Маркова В.П.
Киреев С.Е.
Городничев М.А.
Перепелкин В.А.
Щукин Г. А.
Содержание отчета
1. Введение
2. Особенности аппаратного и программного обеспечения кластера
2.1. Архитектура кластера
2.2. Нумерация ядер и распределение кэшей в узле кластера hpc7000
3. Пакет для тестирования многоядерных систем
4. Тестирование характеристик кластера hpc7000 с помощью тестового
пакета.
4.1. Сравнение параллельных реализаций задач с помощью различных
средств параллельного программирования
4.2. Исследование
сочетаний
процессов
и
потоков
в
реализации
MPI+OpenMP
4.2.1. Распределение процессов и потоков по ядрам узла
4.2.2. Сравнение производительности кластеров hpc7000 и ibm1350 на
реализации MPI+OpenMP
4.3. Сравнение реализаций коллективных операций в MPI
4.3.1. Сравнение реализаций операции MPI_Allreduce
4.3.2. Сравнение реализаций операции MPI_Allgather
5. Выводы
1. Введение
Целью тестирования кластера HP BladeSystem c7000 (ниже hpc7000)
является выявление особенностей программного и аппаратного обеспечения
и их влияние на время выполнения программ численного моделирования.
2. Особенности аппаратного и программного обеспечения
кластера
2.1. Архитектура кластера
Кластер hpc7000 (рис.1) объединяет 8 двухпроцессорных узлов с общей
памятью. Узел (рис.2) содержит два процессора Intel Xeon 5355 по четыре
ядра каждый. Ядра в процессоре попарно динамически разделяют кэш 2-го
уровня. Два ядра, в зависимости от взаимного расположения, могут
обмениваться информацией либо через кэш 2 уровня, либо через шину FSB.
Все 8 ядер для чтения/записи данных в ОЗУ, а так же для синхронизации
одних и тех же данных в разных кэшах используют двойную независимую
шину.
Управляющий узел
Управляющая сеть Ethernet
Вычислительные узлы
Коммутатор InfiniBand
Рис. 1. Схема кластера hpc7000
Вычислительные узлы соединены высокоскоростным коммутатором
InfiniBand. Управляющая сеть Ethernet используется для постановки задач в
очередь и управления кластером. Некоторые характеристики кластера
hpc7000 приведены в табл. 1.
Процессор 1
Ядро1
Ядро2
Общий кэш L2
Процессор 2
Ядро3
Ядро4
Общий кэш L2
Ядро1
Ядро2
Общий кэш L2
Шина FSB
Ядро3
Ядро4
Общий кэш L2
Шина FSB
Двойная независимая шина
Оперативная
память
Северный
мост
Интерфейс
InfiniBand
Рис. 2. Схема вычислительного узла кластера hpc7000
Таблица 1
Характеристика
Название кластера
Количество вычислительных узлов в кластере
Количество процессоров в узле
Количество ядер в процессоре
Итого ядер в кластере
Техпроцесс
Процессор
Тактовая частота процессора
Пиковая производительность процессора
Пиковая производительность кластера
Частота шины
Пропускная способность шины
Кэш первого уровня
Кэш второго уровня
ОЗУ
Пропускная способность памяти
Значение
hpc7000
8
2
4
64
65 нм
Intel Xeon 5355
2.66 ГГц
42.56 ГФлопс
680.96 ГФлопс
1.33 ГГц
160 Мб/с
2×32 Кб на ядро
2 по 2 Мб на 4 ядра
16 Гб
10.66 Мб/с
На кластере hpc7000 установлено следующее программное обеспечение.
1. Операционная система RedHat Linux (RHEL 5u1),
2. Компиляторы Intel 10.1.015, Intel MKL 10.0.3.020, Intel MPI 3.1.038, Intel
Trace Analyzer & Collector 7.1.029,
3. Система пакетной обработки Grid Engine 6.1u4.
В некоторых тестах производится сравнение кластера hpc7000 с
кластером IBM System Cluster 1350 (далее ibm1350). Он имеет аналогичную
архитектуру, но построен на менее производительных процессорах Intel Xeon
5320 1.86 GHz.
2.2. Нумерация ядер и распределение кэшей в узле кластера hpc7000
С помощью команды cpuinfo можно получить следующую информацию о
процессорах кластера (рис.2):
1. Нумерация ядер в узле кластера:
Номера ядер на первом процессоре (package 0): 0, 2, 4, 6.
Номера ядер на втором процессоре (package 1): 1, 3, 5, 7.
2. Распределение кэшей между ядрами в узле кластера:
Кэши 1-го уровня (32 Кб) отдельные для каждого ядра.
Кэши 2-го уровня (4 Мб) разделяют пары ядер 0 и 4, 1 и 5, 2 и 6, 3 и 7.
Рис.3. Нумерация ядер и распределение кэшей в узле кластера
Приведенная нумерация и распределение кэшей (рис.3) одинакова для всех
узлов кластера.
3. Пакет для тестирования многоядерных систем
Настоящий пакет разработан для оценки производительности
современных кластеров на элементах задач численного моделирования.
Пакет включает следующий набор задач:
 умножение матрицы на вектор,
 умножение матрицы на матрицу,
 решение СЛАУ методом простой итерации,
 решение СЛАУ методом сопряженных градиентов,
 решение двумерного уравнения Пуассона методом Якоби.
Все матрицы, используемые в задачах, хранятся в плотном формате.
Задачи реализованы с помощью различных средств параллельного
программирования. На данный момент для всех задач существуют
следующие реализации:
1. MPI,
2. OpenMP,
3. MPI+OpenMP,
4. POSIX Threads,
5. Intel TBB.
Некоторые задачи (умножение матрицы на вектор, решение СЛАУ,
умножение матрицы на матрицу) имеют две реализации в MPI и
MPI+OpenMP:
1. В первой реализации (MPI(1)) данные (матрица и вектор) распределены
между процессами.
2. Во второй реализации (MPI(2)) матрица распределена между процессами,
а вектор (матрица) дублируется во всех процессах.
Все задачи пакета имеют две реализации в TBB:
1. В первой реализации (TBB(1)) данные разбиваются на
фиксированного размера.
2. Во второй реализации (TBB(2)) данные разбиваются на
автоматически с использованием средства TBB auto_partitioner().
блоки
блоки
В дополнение к задачам был создан набор управляющих скриптов для
автоматизации процесса компиляции, запуска задач пакета и сбора
результатов. Для использования пакета на конкретной вычислительной
машине требуется задание только нескольких параметров, таких как
используемые компиляторы и опции компиляции. Возможно указание того,
какие группы тестов должны быть запущены и сколько запусков теста
следует произвести.
4. Тестирование характеристик кластера hpc7000 с помощью
тестового пакета.
С помощью разработанного тестового пакета было проведено
тестирование характеристик производительности кластера hpc7000, а также
их сравнение с характеристиками кластера ibm1350. Для всех тестов
использовался тип данных double.
4.1. Сравнение параллельных реализаций задач с помощью различных
средств параллельного программирования
Результирующее время выполнения теста определялось как среднее
время исполнения теста за 10 прогонов. В задачах решения СЛАУ методом
сопряженных градиентов и простых итераций, а также в задаче решения
уравнения Пуассона выполнялось 1000 итераций метода. Размер задач:
1600×1600.
Умножение матрицы на матрицу
Умножение матрицы на матрицу
35
35
1
30
8
20
2
4
25
8
20
16
64
5
5
0
0
(2
)
MPI(2)
TB
B
TB
B
MPI(1)
PT
O
pe
nM
M
M
(1
)
10
hr
ea
ds
32
10
P
15
PI
(2
)
15
Время, с
4
PI
(1
)
Время, с
25
1
30
2
Параллельная реализация
Параллельная реализация
Метод сопряженных градиентов
Метод сопряженных градиентов
7
7
1
6
8
4
3
Время, с
4
5
Время, с
1
6
2
4
5
8
16
4
32
3
2
2
1
1
0
2
64
0
MPI(1)
MPI(2)
OpenMP PThreads TBB(1)
TBB(2)
MPI(1)
Параллельная реализация
MPI(2)
Параллельная реализация
Метод простой итерации
Метод простой итерации
7
7
1
6
8
4
3
Время, с
4
5
Время, с
1
6
2
4
5
8
16
4
32
3
2
2
1
1
0
2
64
0
MPI(1)
MPI(2)
OpenMP PThreads TBB(1)
Параллельная реализация
TBB(2)
MPI(1)
MPI(2)
Параллельная реализация
Решение уравнения Пуассона
Решение уравнения Пуассона
50
50
1
45
40
30
25
Время, с
Время, с
8
2
40
4
35
1
45
2
4
35
8
30
16
25
32
20
20
64
15
15
10
10
5
5
0
0
MPI
OpenMP
PThreads
TBB(1)
Параллельная реализация
TBB(2)
MPI
Параллельная реализация
В пределах одного узла ускорение наблюдается до 4
процессов/потоков. При числе процессов/потоков более 4 время перестает
уменьшаться, вероятно, вследствие ограниченной пропускной способности
памяти. Только в задаче умножения матриц время продолжает уменьшаться и
до 8 процессов/потоков. Отличие этой задачи в том, что в ней производится
непоследовательный обход памяти. Это приводит к улучшению показателя
масштабируемости, однако в целом непоследовательный обход медленнее
последовательного.
Среди реализаций в пределах узла наилучшее время получилось в
зависимости от задачи у MPI или OpenMP. TBB в большинстве случаев
показывает самые плохие результаты.
В MPI-реализациях при выходе за пределы одного узла наблюдается
резкое уменьшение времени счета, т.к. снижается ограничение на
пропускную способность памяти.
4.2. Исследование сочетаний процессов и потоков в реализации
MPI+OpenMP
4.2.1. Распределение процессов и потоков по ядрам узла
Для гибридных программ, использующих MPI+OpenMP, в библиотеке
Intel MPI существуют специальные опции, позволяющие управлять
распределением процессов и потоков по логическим процессорам (ядрам) на
узлах кластера.
Для управления распределением MPI процессов и порожденных ими
OpenMP потоков в программах MPI+OpenMP используется переменная
окружения I_MPI_PIN_DOMAIN, которая определяет разбиение множества
логических процессоров узла на непересекающиеся подмножества (домены).
Потоки процесса, запущенного на узле, могут мигрировать только в пределах
домена, на который назначен процесс. Ниже перечислены возможные
значения переменной I_MPI_PIN_DOMAIN.
 core – каждое ядро многоядерной системы определяется как отдельный
домен;
 sock – каждый процессорный сокет определяется как отдельный домен;
 node – весь узел (все логические процессоры на нем) определяется как
отдельный домен;
 cache1, cache2, cache3, cache – логические процессоры, разделяющие
кэш соответствующего уровня, определяются как отдельный домен
(cache – выбирается наибольший домен из всех остальных);
 omp
–
на
основе
значения
переменной
окружения
OMP_NUM_THREADS выбирается наиболее подходящий домен из
core, sock, node и cache; если переменная OMP_NUM_THREADS не
определена, выбирается домен node.
Переменная I_MPI_PIN_DOMAIN не определена по умолчанию.
Документация по Intel MPI говорит, что при запуске программ MPI+OpenMP
без определения переменной I_MPI_PIN_DOMAIN домены не определены.
Но тесты показывают, что в этом случае доменом является каждое ядро,
поэтому при увеличении числа потоков на процесс ускорения происходить
не будет. Значит, при использовании сочетания MPI+OpenMP эту
переменную необходимо определить подходящим образом.
В следующих тестах задействовано 8 ядер одного узла. Показана
зависимость времени работы теста от соотношения процессов и потоков в
узле, а также от значения параметра I_MPI_PIN_DOMAIN. В пределах
одного домена потоки могут мигрировать с одного ядра на другое. Размер
задачи: 1600×1600.
Метод сопряженных градиентов
MPI(1)+OpenMP
2,5
node
omp
cache
sock
Метод сопряженных градиентов
MPI(2)+OpenMP
2,5
2
Время, с
Время, с
2
node
omp
cache
sock
1,5
1
0,5
1,5
1
0,5
0
0
8, 1
4, 2
2, 4
Число процессов, потоков
1, 8
8, 1
4, 2
2, 4
Число процессов, потоков
1, 8
node
omp
cache
sock
Метод простой итерации
MPI(1)+OpenMP
2,5
2,5
2
Время, с
2
Время, с
node
omp
cache
sock
Метод простой итерации
MPI(2)+OpenMP
1,5
1
0,5
1,5
1
0,5
0
0
8, 1
4, 2
2, 4
1, 8
8, 1
Число процессов, потоков
4, 2
2, 4
1, 8
Число процессов, потоков
С полной загрузкой ядер узла при переходе от процессов к потокам
время
счета
уменьшается.
Различные
значения
параметра
I_MPI_PIN_DOMAIN дают небольшую разницу времени выполнения,
которая в общем случае зависит от задачи. В приведенных тестах в
большинстве случаев лучшие результаты показывали параметры node и omp.
В следующих тестах задействовано 4 ядра одного узла. Размер задачи:
1600×1600.
Метод сопряженных градиентов
MPI(1)+OpenMP
Метод сопряженных градиентов
MPI(2)+OpenMP
5
node
4,5
node
4
omp
4
omp
3,5
3
cache
sock
Время, с
Время, с
5
4,5
2,5
2
1,5
3,5
3
cache
sock
2,5
2
1,5
1
1
0,5
0,5
0
0
4, 1
2, 2
Число процессов, потоков
1, 4
4, 1
2, 2
Число процессов, потоков
1, 4
Метод простой итерации
MPI(1)+OpenMP
Метод простой итерации
MPI(2)+OpenMP
5
4,5
node
4,5
node
4
omp
4
omp
3,5
3
cache
sock
Время, с
Время, с
5
2,5
2
1,5
3,5
3
cache
sock
2,5
2
1,5
1
1
0,5
0,5
0
0
4, 1
2, 2
1, 4
4, 1
Число процессов, потоков
2, 2
1, 4
Число процессов, потоков
При неполной загрузке узла наименьшее время счета получается, когда
задействуется вся кэш-память процессоров, т.е. каждый поток работает со
своей кэш-памятью 2 уровня. Если потоки делят общую кэш-память, то часть
кэш-памяти узла не используется, что приводит к сильному замедлению.
Следовательно, для задач с похожими свойствами автоматический выбор
распределения потоков при параметре omp не самый лучший.
4.2.2. Сравнение производительности кластеров hpc7000 и ibm1350 на
реализации MPI+OpenMP
В следующих тестах используется один узел кластера (8 ядер).
Показано время работы теста на узлах кластеров hpc7000 и ibm1350 при
различных соотношениях числа процессов и потоков. Параметру
I_MPI_PIN_DOMAIN задано значение node. Размер задачи: 2000×2000.
Умножение матрицы на матрицу
MPI(1)+OpenMP
Умножение матрицы на матрицу
MPI(2)+OpenMP
hpc7000
ibm1350
14
ibm1350
18
16
12
14
Время, с
10
Время, с
hpc7000
8
6
4
12
10
8
6
4
2
2
0
0
8, 1
4, 2
2, 4
Число процессов, потоков
1, 8
8, 1
4, 2
2, 4
Число процессов, потоков
1, 8
Метод сопряженных градиентов
MPI(2)+OpenMP
hpc7000
ibm1350
8
8
7
7
6
6
5
5
Время, с
Время, с
Метод сопряженных градиентов
MPI(1)+OpenMP
4
3
3
2
1
1
0
8, 1
4, 2
2, 4
1, 8
8, 1
Число процессов, потоков
Метод простой итерации
MPI(1)+OpenMP
4, 2
2, 4
1, 8
Число процессов, потоков
Метод простой итерации
MPI(2)+OpenMP
hpc7000
ibm1350
8
8
7
7
6
6
5
5
Время, с
Время, с
ibm1350
4
2
0
hpc7000
4
3
ibm1350
4
3
2
2
1
1
0
hpc7000
0
8, 1
4, 2
2, 4
Число процессов, потоков
1, 8
8, 1
4, 2
2, 4
1, 8
Число процессов, потоков
На задачах решения СЛАУ соотношения между временами хорошо
отражают соотношение между частотами процессоров (2.66 ГГц для hpc7000
и 1.86 ГГц для ibm1350). На задаче перемножения матриц, где имеет место
непоследовательный обход, картина более сложная. Здесь, в отличие от задач
с последовательным обходом данных, объем данных в каждом MPI-процессе
сложно предсказуемым образом влияет на скорость их обхода, что объясняет
полученный разброс времен.
Наилучшее соотношение между процессами и потоками на различных
кластерах на задаче перемножения матриц отличается. Для задач решения
СЛАУ лучшее время показывает тест с одним MPI-процессом и 8-ю
потоками OpenMP.
В следующих тестах используется 4 узла кластера (32 ядра). Также
показано время работы теста при различных соотношениях числа процессов
и потоков. Параметру I_MPI_PIN_DOMAIN задано значение node. Размер
задачи: 5000×5000.
Умножение матрицы на матрицу
MPI(1)+OpenMP
Умножение матрицы на матрицу
MPI(2)+OpenMP
hpc7000
ibm1350
60
80
40
Время, с
Время, с
70
30
20
60
50
40
30
20
10
10
0
0
8_1
4_2
2_4
1_8
8_1
Число процессов, потоков
Метод сопряженных градиентов
MPI(1)+OpenMP
4_2
2_4
1_8
Число процессов, потоков
Метод сопряженных градиентов
MPI(2)+OpenMP
hpc7000
ibm1350
14
14
12
12
10
10
Время, с
Время, с
ibm1350
90
50
8
6
hpc7000
ibm1350
8
6
4
4
2
2
0
0
8_1
4_2
2_4
1_8
8_1
Число процессов, потоков
Метод простой итерации
MPI(1)+OpenMP
4_2
2_4
1_8
Число процессов, потоков
Метод простой итерации
MPI(2)+OpenMP
hpc7000
ibm1350
14
14
12
12
10
10
Время, с
Время, с
hpc7000
8
6
ibm1350
8
6
4
4
2
2
0
hpc7000
0
8_1
4_2
2_4
Число процессов, потоков
1_8
8_1
4_2
2_4
1_8
Число процессов, потоков
Для задач большего размера, работавших на 4 узлах, выводы в целом
аналогичны выводам для одного узла. Только уменьшилась разница времен
для различных соотношений числа процессов и потоков. Более того, в
отличие от результатов для одного узла, на кластере hpc7000 у некоторых
задач с увеличением числа потоков имеет место замедление.
4.3. Сравнение реализаций коллективных операций в MPI
Intel MPI позволяет выбирать различные алгоритмы для функций
коллективных взаимодействий между процессами: MPI_Allreduce,
MPI_Allgather и т.д. Было исследовано влияние выбора того или иного
алгоритма на скорость выполнения программ, в которых эти алгоритмы
используются.
4.3.1. Сравнение реализаций операции MPI_Allreduce
Операция MPI_Allreduce используется в реализациях MPI(1) и MPI(2)
метода простой итерации и метода сопряженных градиентов для
распределения вычисленных коэффициентов между всеми процессами на
каждой итерации. Алгоритмы MPI_Allreduce:
1. Recursive doubling algorithm
2. Rabenseifner’s algorithm
3. Reduce + Bcast algorithm
4. Topology aware Reduce + Bcast algorithm
5. Binomial gather + scatter algorithm
6. Topology aware binomial gather + scatter algorithm
Количество итераций в тестах было различным в зависимости от числа
процессов. В качестве результата бралось среднее время из 2 повторений. В
методе сопряженных градиентов выполняется две операции MPI_Allreduce
на итерацию метода, а в методе простой итерации – одна операция
MPI_Allreduce на итерацию метода. Размер задачи: 1600×1600.
Метод сопряженных градиентов, MPI(1)
200
180
Recursive doubling algorithm
160
Время, с
140
Rabenseifner’s algorithm
120
100
Reduce + Bcast algorithm
80
60
Topology aware Reduce +
Bcast algorithm
40
Binomial gather + scatter
algorithm
20
0
8
16
32
80000
160000
320000
Число процессов, итераций
Topology aware binomial
gather + scatter algorithm
Метод сопряженных градиентов, MPI(2)
250
Recursive doubling algorithm
200
Время, с
Rabenseifner’s algorithm
150
Reduce + Bcast algorithm
100
`
50
Topology aware Reduce +
Bcast algorithm
0
Binomial gather + scatter
algorithm
8
16
32
80000
160000
320000
Topology aware binomial
gather + scatter algorithm
Число процессов, итераций
Метод простой итерации, MPI(1)
180
160
Recursive doubling algorithm
Время, с
140
Rabenseifner’s algorithm
120
100
Reduce + Bcast algorithm
80
60
Topology aware Reduce +
Bcast algorithm
40
20
Binomial gather + scatter
algorithm
0
8
16
32
80000
160000
320000
Topology aware binomial
gather + scatter algorithm
Число процессов, итераций
Метод простой итерации, MPI(2)
180
160
Recursive doubling algorithm
140
Rabenseifner’s algorithm
Время, с
120
100
Reduce + Bcast algorithm
80
`
60
Topology aware Reduce +
Bcast algorithm
40
20
Binomial gather + scatter
algorithm
0
8
16
32
80000
160000
320000
Topology aware binomial
gather + scatter algorithm
Число процессов, итераций
Алгоритм 3 (Reduce + Bcast) показывает наихудшие результаты
практически во всех тестах. Наилучшие результаты у алгоритма 1 (Recursive
doubling).
4.3.2. Сравнение реализаций операции MPI_Allgather
Операция MPI_Allgather используется в реализации MPI(2) метода
простой итерации и метода сопряженных градиентов для распределения
вычисленных векторов между всеми процессами на каждой итерации.
Алгоритмы MPI_Allgather:
1. Recursive doubling algorithm
2. Bruck’s algorithm
3. Ring algorithm
4. Topology aware Gatherv + Bcast algorithm
Количество итераций в тестах было различным в зависимости от числа
процессов. В качестве результата бралось среднее время из 2 повторений. В
обоих методах выполняется одна операция MPI_Allreduce на итерацию
метода. Размер задачи: 3200×3200.
Метод сопряженных градиентов, MPI(2)
120
100
Время, с
Recursive doubling algorithm
80
Bruckr’s algorithm
60
Ring algorithm
40
Topology aware Gatherv +
Bcast algorithm
20
0
8
80000
16
32
160000
320000
Число процессов, итераций
Метод простой итерации, MPI(2)
120
100
Время, с
Recursive doubling algorithm
80
Bruckr’s algorithm
60
Ring algorithm
40
Topology aware Gatherv +
Bcast algorithm
20
0
8
16
32
80000
160000
320000
Число процессов, итераций
Алгоритм 4 (Topology aware Gatherv + Bcast) показывает наихудшие
результаты практически во всех тестах (причем его результаты ухудшаются с
ростом числа процессов). Наилучшие результаты у алгоритма 1 (Recursive
doubling).
5. Выводы
Проведенное тестирование позволяет сделать следующие выводы об
особенностях программного и аппаратного обеспечения кластера hpc7000 и
их влиянии на время выполнения программ численного моделирования:
1. Пропускная способность памяти на некоторых задачах ограничивает рост
производительности при увеличении числа используемых ядер узла.
2. Использование MPI+OpenMP при некоторых сочетаниях числа процессов
и потоков в узле может дать существенный прирост производительности
по сравнению с использованием только MPI или только OpenMP.
Наилучшее сочетание числа процессов и потоков зависит от задачи и
параметров вычислительного узла.
По сути, решающим фактором для производительности является способ
разбиения данных на блоки для их независимой обработки процессами
или потоками. Реализовать различные способы параллельной обработки
данных в узле можно как с помощью MPI, так и с помощью OpenMP. Но
при
использовании
простого
подхода
к
параллельному
программированию, когда каждый процесс содержит блок данных,
обрабатываемый несколькими потоками, сочетание MPI+OpenMP дает
большую гибкость в настройке параметров.
3. Наиболее предпочтительные значения параметра I_MPI_PIN_DOMAIN в
реализации MPI+OpenMP при полной загрузке узла в большинстве
случаев: node или omp. Если же используются не все ядра узла, то лучше
использовать значение node, при котором задействуется максимально
возможный объем кэш-памяти узла. Например, задание параметра omp
привело в тестах к такому размещению 2-х процессов по 2 потока, что
каждая пара потоков находится над общей кэш-памятью, а при задании
параметра node операционная система распределила по одному потоку на
каждую общую кэш-память узла.
4. Производительность кластера hpc7000 превосходит производительность
ibm1350 на большинстве задач примерно на 30%, что соответственно
разнице в тактовой частоте базовых процессоров.
5. Среди реализаций коллективных операций в Intel MPI наилучшую
производительность показал Recursive doubling algorithm.
Download