^5б&тн,и,к, ОЛГЙОяО/
Уфа : УГАТУ. 2012__________________________________СУ СУ______________________Т. 16, №6(51). С. 25-31
СИСТЕМНЫЙ АНАЛИЗ, УПРАВЛЕНИЕ И ОБРАБОТКА ИНФОРМАЦИИ
УДК 004.272, 004.31
М. С. Клинов, С. Ю. Лапшина, П. Н. Телегин, Б. М. Шабанов
ОСОБЕННОСТИ ИСПОЛЬЗОВАНИЯ МНОГОЯДЕРНЫХ ПРОЦЕССОРОВ В НАУЧНЫХ ВЫЧИСЛЕНИЯХ
В статье рассматриваются особенности подготовки параллельных программ для многоядерных процессоров. Приведены результаты исследования эффективности выполнения программ на процессорах 1п(е1 Хеоп 5450 (Нагрегкмп) и 1п(е1Хеоп 5675 ОЛ/еэ^еге). Рассматривается эффект превышения размеров кэш-памяти и конфликтов обращений к памяти при использовании нескольких ядер. Параллельное программирование', моделирование; многоядерные процессы, эффективность программ
ВВЕДЕНИЕ
При разработке программ параллельной обработки данных, в том числе при использовании автоматических инструментов, необходимо учитывать архитектуру вычислительных систем и имеющийся опыт программирования. Современные процессоры, такие как 1п1е1 Хеоп 5450 (Нагрег1:о\¥п) и ЫеГХеоп 5675 (\¥ез1:теге), входящие в состав суперкомпьютера МВС-100К [1], представляют собой четырехъядерный и шестиядерный процессор соответственно, и на материнскую плату могут устанавливаться по два одинаковых процессора. Таким образом, в одном узле с общей памятью могут одновременно работать 8 или 12 ядер.
Такая архитектура похожа на архитектуру классических 8МР-систем, однако имеет ряд существенных отличий [2], которые связаны с использованием кэш-памяти двумя процессорами на одной материнской плате и с подключением процессоров. Это делает крайне важным размещение процессов программы по процессорам.
Для использования в научных вычислениях узлы, содержащие многоядерные процессоры, объединяются в кластеры [3], что влечет за собой такие особенности:
• использование общей кэш-памяти;
• конфликты по памяти;
• конфликты по сетевым соединениям;
• миграция процессов;
• модели программирования.
Более подробно они описаны в работе [4].
Контактная информация: 8-916-518-65-80 Работа выполнена при поддержке госконтракта Министерства образования и науки РФ №07.514.12.4001.
В системах автоматической подготовки параллельных программ, таких как система RATIO [5] и система САПФОР [6] вопрос построения априорной оценки параллельных вычислений для выбора наилучшего варианта распараллеливания программы является крайне острым. При этом важно оценивать варианты распараллеливания с учетом архитектуры вычислительных систем и перечисленных выше особенностей.
При распараллеливании программ без использования инструментов автоматического распараллеливания крайне необходимым является процесс настройки параметров программы, например, расчет и использование оптимальных блоков вычислений и параметров запуска программы. Выполнение такого расчета предлагается существенно автоматизировать.
1. МАТЕМАТИЧЕСКАЯ МОДЕЛЬ
В работе [4] были описаны формулы для вычисления времени считывания данных из памяти и времени выполнения гнезда циклов. Был рассмотрен случай, широко используемой в научных вычислениях векторной операции х = х + + a ■ Ъ.
При использовании многоядерной архитектуры и больших объемах данных требуемые элементы векторов не успевают считываться из памяти, и возникает конкуренция за память. В этом случае время считывания из памяти можно принимать равным [4]:
2 N
Т =------—------, (1)
Vb{l + CR{2N))
где N - длина вектора для каждого процесса (0 < < /' < N), V/, - скорость считывания данных из памяти.
Здесь предполагается, что чтение производится «одним куском», без системных прерываний.
В этой формуле используется коэффициент СИ, который определяется для конкретной системы с учетом объема используемых данных. Такой способ позволяет проводить оценки при небольшом использовании вычислительных ресурсов, например, для выбора параметров параллельной программы, в том числе автоматического выбора, с учетом многоядерной архитектуры.
Рассмотрим случай, когда вычисления оформлены в виде гнезда циклов
^ П = 1, п1
^ 1к = 1, пк
х(П) = £Щ,...Дк, данные)
enddo
enddo.
Время выполнения гнезда циклов на разнородной вычислительной системе при дуплексной передаче данных по коммуникационной сети можно определять по формуле, приведенной в [4]:
Тц = шах(шах(Тц", Тц‘) +
шах(£ Т^Ж) • (1 + СЬ{з, X, п[)), (2)
I Т^(пЗ) • (1 + СЬ( 5, X, п\))),
X
гг! 5
где Тц - время выполнения части цикла, назначенного на систему з: Тц5 = Т*0ГЁ + Ь5 / Ж(1 + + СЯ) + Т (п5) + Г\еп* (п5), Т^Х - время передачи X байт в из системы 5 в систему X, П, I - время выполнения одной итерации в систе-
X
ме 5, п5 - количество передаваемых данных из системы 5 в систему X, N - количество используемых процессоров в системе 5, Ь - количество итераций цикла в системе 5, Тощ - время организации выполнения цикла в системе 5, Т ^л/^Х) - время инициализации передачи данных из системы 5 в систему X (определяется в первую очередь буферизацией), -
время инициализации передачи приема из системы X в систему 5 (определяется в первую очередь буферизацией), СЬ - коэффициент конфликтов по памяти, зависящий от системы, объема данных и блокировки коммуникационной сети, аналогично формуле (1).
Для определения оптимальной загрузки требуется минимизировать функцию (2).
Здесь также предполагается, что выполнение циклов производится без системных прерываний.
Для определения оптимальной загрузки требуется минимизировать функцию (2).
2. ТЕСТОВАЯ ПРОГРАММА
Для определения необходимых для вышеприведенных формул параметров была разработана программа ЬЛРТБ8Т, которая определяет производительность:
• ядер при выполнении операций с плавающей точкой;
• оперативной памяти при выполнении операций чтения-записи;
• коммуникационной среды при выполнении вызовов МР1;
• подсистемы ввода-вывода при выполнении файловых операций.
Данная программа во время работы обеспечивает выборочную нагрузку на заданные компоненты вычислительной системы.
Программа может в цикле выполнять последовательность действий, которая задается через базовые тесты:
• загрузка процессора (используется функция cblas_dgemm [7]);
• загрузка коммуникационной сети;
• загрузка файловой системы;
• интенсивная работа с оперативной памятью;
• простой.
Программа может работать с любым числом процессов. При этом любому процессу или группе процессов можно задавать индивидуальные задания.
Работа тестов делится на этапы. На каждом этапе можно задавать последовательность тестов для отдельного процесса или группы процессов.
Можно создавать производные тесты, задавая параметры (время, память, загрузка, режим выполнения) индивидуальным тестам. Производные тесты создаются из уже описанных тестов изменением параметров с помощью модификаторов. При тестировании загрузки процессора можно использовать дополнительно до 7 динамических библиотек БЬЛ8. Базовые настройки вынесены в конфигурационный файл.
Кроме того, одним из примеров задач, для которых важна настройка параметров, является задача умножения матриц с разными размерами блока, описанная в [4].
3. РЕЗУЛЬТАТЫ ИЗМЕРЕНИЙ
Результаты выполнения такой задачи на процессоре Іпіе! Хеоп 5450 (Нагрейо—п) приведены на рис. 1, на котором можно видеть, что после заполнения кэш-памяти происходит снижение производительности до 2 раз.
На рис. 2 и 3 представлены результаты выполнения на одном вычислительном узле при загруженности одного или всех ядер узла соответственно. В каждом случае вычислительный узел имел общую для всех запущенных ядер память, запуски проводились на восьми ядрах системы с использованием процессоров 1^е1 Хеоп 5450 (НагреГю—п) и на двенадцати ядрах с использованием процессоров 1п1е1 Хеоп 5675 (Westmeгe).
Рис. 1. Блочное умножение матриц. Зависимость производительности (МФлопс) одного ядра от размера матрицы и размера блока. Занято одно ядро процессора Ше! Хеоп 5450 (Нагрейо—п)
Рис. 2. Блочное умножение матриц 4096 х 4096.
Зависимость производительности (МФлопс) одного ядра от размера блока. Занято одно ядро
МВС-ШОКртевИпеге) * МВС-ЮОК (НагреПомі)
2500
-О
ъ
£ 2000
Л
о 4-----,------,-----,-----,-----,-----,------,-----,-----
1Є 32 64 128 25Є 512 1024 2048 4096
Размер блока
Рис. 3. Блочное умножение матриц 4096 х 4096. Зависимость производительности (МФлопс) одного ядра от размера блока. Заняты все ядра
560
540
и 520
в;
г 500
о.
оа 4Ь0
460
440
420
12 4 8
Число ядер
Рис. 4. Зависимость времени выполнения программы комплекса БЮСЬиЭТ в зависимости от используемых ядер на процессоре
—•— Нагрег1о\уп (1 ядро) —*—НагрегіоУїт (2 ядра)
—Нагрегіодап (4 ядра) —— Harpertown (8 ядер)
2500
-О
К
О
О
16 32 64 128 256 512 1024 2048 4096
Размер блока
Рис. 5. Блочное умножение матриц 4096 х 4096. Зависимость производительности (МФлопс)
одного ядра от размера блока
Таким образом, для процессора Harpertown CR(16777216) = 3,29 (при 12 ядрах), процессора Westmere CR(16777216) = 2,11(при 8 ядрах).
В качестве примера работы с целыми числами рассмотрим результаты тестирования программы моделирования процессов распространения массовых эпидемий комплекса BIOCLUST [8], разработанного в МСЦ РАН. На рис. 4 приведены времена работы в зависимости от количества используемых ядер процессора Harpertown на одном узле при выполнении всей программы на 48 ядрах. Коэффициент CR составляет 0,02 при использовнии 2 ядер, 0,04 при использовании 4 ядер и 0,18 при использовании 8 ядер.
На рис. 5 представлены результаты выполнения программы на разном количестве ядер системы HP Proliant с использованием процессоров Intel Xeon 5450 (Harpertown).
На данном графике видно, что производительность процессора увеличивается при увеличении размера блока, пока не наступает переполнение кэш-памяти. После этого происходит очевидное падение производительности.
С помощью программы LAPTEST были измерены производительности выполнения различных операций при использовании разного числа ядер (от двух ядер до максимального числа ядер одного узла и нескольких узлов). Замерялось время выполнения операций, и вычислялась средняя производительность одного ядра процессора. Данные позволяют сделать вывод об использовании кэш-памяти.
Производительность выполнения операции DGEMM (BLAS Level 3) с размером матрицы 256 (С = 0,5 • A • B + С) практически не зависела от числа используемых ядер в диапазоне от 2 до
12 ядер процессоров Intel Xeon 5675 (Westmere) на двух узлах и составляла около 11,7 GFlops. Однако при использовании 24 ядер производительность снизилась до 10.5 GFlops, что объясняется совместным использованием кэшпамяти.
Рассмотрим производительность при выполнении операций чтения и записи в память при использовании буфера размера в 500 MB.
Операция Memory 1 - векторная операция, связанная с чтением из памяти длинных векторов: х = х + B[1:25685333] • С[1:25685333].
Операция Memory 2 - операция записи в память длинного вектора A[1:25685333] = х.
Производительность данных операций зависела от числа используемых ядер процессоров Westmere (рис. 6).
Производительность при выполнении операций Memory 1 и Memory 2: представлена на рис. 7 и 8 для последовательного обращения к элементам массива. Известно, что обращение к памяти в вычислительных системах оптимизировано под последовательный доступ. Поэтому проводилось тестирование операций с памятью с шагом 1031, результаты которого представлены на рис. 9 и 10. Графики отображают зависимость производительности от объема используемой памяти.
Исходя из полученных данных можно определить замедление, вызванное использованием кэш-памяти. Для процессора Harpertown при длине вектора 2000000 оно составляет 9,7, для процессора Westmere при той же длине вектора оно составляет 3,46. При этом замедление, вызванное непоследовательным чтением из памяти, составляет десятичный порядок.
Рис. 6. Зависимость производительности (МБ/с) одного ядра от числа используемых ядер
Рис. 7. Чтение из памяти. Зависимость производительности (МБ/с) одного ядра от объема используемой памяти (МБ)
Рис. 8. Запись в память. Зависимость производительности (МБ/с) одного ядра от объема используемой памяти (МБ)
Рис. 9. Непоследовательное чтение из памяти. Зависимость производительности (МБ/с) одного ядра от объема используемой памяти (МБ)
Memory 2, шаг 1031 (2 ядра) Memory 2, шаг 1031 (Зядер)
1400
Si
I—
О
19ПП
о
1 4 8 12 16 32 64 128 266 612
Объем памяти
Рис. 10. Непоследовательная запись в память. Зависимость производительности (МБ/с) одного ядра от объема используемой памяти (МБ)
ВЫВОДЫ
Исследование особенностей использования многоядерных процессоров является важной задачей для расчета оптимальных параметров параллельных программ и для построения априорных оценок эффективности различных вариантов распараллеливания в системах автоматического и автоматизированного распараллеливания. Наиболее сильный эффект проявляется при превышении размеров кэш-памяти и при конфликтах обращений к памяти, когда используется много ядер. Это следует учитывать при оптимизации программ.
СПИСОК ЛИТЕРАТУРЫ
1. Суперкомпьютер «МВС-100К» [Электронный ресурс] (http://www.j scc.ru/hard/mvs100k.shtml).
2. Eadline D. OptimizedHPCPerformance:MPI Strategies for Next Generation Quad-Core Intel® Xeon® Processors [Электронный ресурс] (http://basement-supercomputing. com/download/reports/harpertown-WP 1 -rev3.pdf)
3. Савин Г. И., Телегин П. Н., Шабанов Б. М.
Кластеры Беовульф // Известия высших учебных заведений. Электроника. 2004. № 1. C. 7-12.
4. Шабанов Б. М., Телегин П. Н., Алады-шев О. С. Особенности использования многоядерных процессоров // Программные продукты и системы. 2008. № 1. C. 7-9.
5. Телегин П. Н., Шабанов Б. М. Связь моделей программирования и архитектуры параллельных вычислительных систем // Программные продукты и системы. 2007. № 2. C. 5-8.
6. Автоматическое распараллеливание последовательных программ для многоядерных кластеров /
В. А. Бахтин [и др.] // Научный сервис в сети Интернет: суперкомпьютерные центры и задачи: тр. Всероссийск. науч. конф. М.: Изд-во МГУ, 2010. С. 12-15.
7. BLAS (Basic Linear Algebra Subprograms) [Электронный ресурс] (http://www.netlib.org/blas).
8. Лапшина С. Ю. Высокопроизводительные вычисления в практике моделирования роста перколя-ционных кластеров // Программные продукты и системы. 2011. № 4(96). С. 75-79.
ОБ АВТОРАХ
Клинов Максим Сергеевич, ст. науч. сотр. Ин-та прикл. математики им. М. В. Келдыша РАН. Дипл. математик (МГУ, 2004). Канд. физ.-матем. наук (ИПМ им. М. В. Келдыша РАН, 2009). Иссл. в обл. парал-лельн. программирования, инструментальн. средств программирования, автоматическ. распараллеливания программ.
Лапшина Светлана Юрьевна, науч. сотр. Межве-домств. суперкомпьютера центра РАН. Дипл. математик (ВМиК МГУ, 1990). Готовит дисс. в обл. имитац. моделирования.
Телегин Павел Николаевич, зав. отд. того же центра. Дипл. инженер-математик (МИЭМ, 1983). Канд. техн. наук (МФТИ, 1989). Иссл. в обл. параллельн. программирования, инструментальн. средств программирования, автоматическ. распараллеливания программ.
Шабанов Борис Михайлович, зам. дир. того же центра. Дипл. инженер-электрик (МЭИ, 1977). Канд. техн. наук (ИПК АН СССР, г. Москва, 1991). Иссл. в обл. высокопроизводительн. выч. систем, архитектуры ЭВМ, эффективности выполнения программ.