УДК 004.032.24 В. В. Бородулин, А.С. Миронов, А. В. Стариков, 2012 ИССЛЕДОВАНИЕ ПРОИЗВОДИТЕЛЬНОСТИ ВЫЧИСЛИТЕЛЬНОГО КЛАСТЕРА НА ЧЕТРЕХЪЯДЕРНЫХ ПРОЦЕССОРАХ Бородулин В. В. – аспирант кафедры «Вычислительная техника» (ТОГУ); Миронов А. С. – ст. преподаватель кафедры «Вычислительная техника» (ТОГУ); Стариков А. В. – студент кафедры «Вычислительная техника» (ТОГУ) Исследована производительность вычислительного кластера на четырёхъядерных процессорах intel Xeon E7340 при решении задач параллельных вычислений в зависимости от количества задействованных процессорных ядер и узлов кластера. Построены графики, иллюстрирующие эти зависимости. Сделаны выводы о рациональном использовании процессорного времени. Введение В настоящий момент использование многопроцессорных систем является важнейшим этапом развития компьютерной техники. И одной из заметных частей таких многопроцессорных систем являются вычислительные кластерные системы, которые предназначены для выполнения численных расчетов, имеющих высокие требования к ресурсам ЭВМ. Проблема эксплуатации кластерных систем и проведения параллельных вычислений является очень актуальной. Ежегодно ей посвящают одно из направлений всероссийской суперкомпьютерной конференции «Научный сервис в сети Интернет: масштабируемость, параллельность, эффективность», проходящей в городе Новороссийске. В связи с ростом числа кластерных систем встаёт вопрос об оценки производительности и выявления «узких мест» тестируемого вычислительного кластера [1-4]. Практически каждый существующий кластер является уникальным по своей архитектуре, в связи с этим существует проблема наиболее рационального использования ресурсов вычислительного кластера. Авторами было выдвинуто предположение, что использование всех ядер вычислительного кластера не всегда является наиболее оптимальным вариантом. Предположение довольно смелое, но основано оно на знании элементарной теории построения вычислительных систем. Программное обеспечение является неотъемлемой частью любого вычислительного кластера. Многие из оригинальных программных продуктов являются платными, и их стоимость исчисляется исходя из количества вовлечённых в вычисления процессорных ядер. Поэтому исследования в области наиболее рационального использования ресурсов являются для науки практической задачей. 1 Технические характеристики кластера Вычислительный кластер ТОГУ состоит из 6 узлов. На каждом узле расположено по четыре четырехъядерных процессора Intel Xeon E7340, 32 Гб (PC2 – 5300) оперативной памяти. Узлы кластера соединены между собой при помощи сетевого интерфейса Infiniband. На всех узлах кластера установлена операционная система Novell SuSe Linux Enterprice Server 10. Из средств разработки имеются Intel C++ Compiler, Intel Fortran Compiler, Intel MPI Library, Intel Trace Analyzer and Collector, Intel Math Kernel Library для кластеров, Intel MPI Benchmarks, Intel Debugger, библиотеки Intel Cluster OpenMP for Intel Compilers for Linux. Для организации параллельных вычислений и взаимодействия между собой процессов на вычислительном кластере ТОГУ могут быть использованы библиотеки MPI, которые являются наиболее распространённым стандартом интерфейса обмена данными в параллельном программировании. Основным средством коммуникации между процессами в MPI является передача сообщений друг другу. Описание решаемой задачи Существуют различные методы оценки производительности вычислительных кластерных систем. Один из наиболее известных методов – оценка при помощи тестов Linpack. Программа тестирует производительность системы при решении различных задач линейной алгебры. Для тестирования производительности вычислительного кластера ТОГУ была разработана программа, реализующая перемножение матриц размерностью 10000 * 10000 типа double. Теоретически (без учета затрат времени на обмен данными), задача умножения матриц распараллеливается очень хорошо (выходные данные вычисляются по единому алгоритму на основе исходных и в процессе вычисления не изменяют последних). Однако при практическом распараллеливании (разработке программы) необходимо учитывать как задержки времени при обменах, так и распределение по вычислительным узлам вычислений и блоков данных [5]. Существует множество вариантов решения этой задачи на многопроцессорных системах. Алгоритм решения существенным образом зависит от того, производится или нет распределение матриц по процессорам, и какая топология процессоров при этом используется. Как правило, задачи такого типа решаются либо на одномерной сетке процессоров, либо на двумерной. Ниже предлагается вариант программы решения этой задачи, который в достаточно полной мере учитывает специфику алгоритма перемножения матриц. Поскольку для вычисления каждого матричного элемента матрицы С необходимо выполнить скалярное произведение строки матрицы А на столбец матрицы В, то матрица А разложена на одномерную сетку процессоров по строкам, а матрица В – по столбцам. Матрица С разложена по строкам, как матрица А (рис. 1). A B C P0 P0 P1 P2 P1 X P0 P1 P2 P3 P3 = P2 P3 Рис. 1. Распределение матриц на одномерную сетку процессоров 2 При таком распределении строка матрицы А, необходимая для вычисления некоторого матричного элемента, гарантированно находится в данном процессоре, а матрица B передается по мере необходимости. В процессе выполнения программы матрица B будет полностью передана каждому процессу, т.к. для нахождения каждой строки результирующей матрицы С необходимы все столбцы матрицы B[6]. Поэтому в программе каждому процессу будет полностью передаваться матрица В. Программа состоит из управляющего процесса и вычислительных процессов. Управляющий процесс генерирует случайным образом две матрицы размерностью 10000*10000 типа double (8 байт) и записывает их соответственно в фалы A.txt, B.txt. Причем перед записью матрица B дополнительно транспонируется, что позволит в дальнейшем ускорить время перемножения матриц. После этого управляющий процесс отсылает каждому процессу номер начальной строки и количество строк матрицы А, которые необходимо умножить на матрицу B в этом процессе. Вычислительные процессы, получив данные от управляющего процесса, считывают полностью матрицу B из файла B.txt и заданную часть матрицы A из файла A.txt. После этого в цикле происходит перемножение матриц. Полученная матрица передается в управляющий процесс. Управляющий процесс, получив все части результирующей матрицы С от вычислительных процессов, записывает ее в файл C.txt. На этом выполнение программы завершается. Измерение производительности вычислительного кластера и оценка результатов На рис. 2 представлен график, иллюстрирующий зависимость времени перемножения матриц от количества процессов, на которые распараллелена задача. Нагрузка между узлами распределяется последовательно, вначале полностью загружается первый узел (все 16 ядер), потом загружается следующий. Если количество процессов превышает суммарное количество ядер на всех узлах, то снова загружается первый узел. Рис. 2. Зависимости времени перемножения матриц от количества процессов 3 Табл. 1 Название таблицы График иллюстрирует типичную ситуацию с «узким местом» в подсистеме памяти. Очевидно, что при решении данной задачи использование на одном узле более четырёх ядер не является эффективным решением. Применительно к вычислительному кластеру ТОГУ результат исследования говорит о том, что в некоторых задачах можно обойтись меньшим количеством ресурсов, чем им предоставлено. Оптимальное количество процессоров при решении данной конкретной задачи – 4х6=24. То есть по четыре ядра от каждого узла. Для оценки оптимального количества запрашиваемых ресурсов для других вычислительных задач необходимо проводить дополнительные исследования. Проведённые же исследования, свидетельствуют о том, что время решения задачи на шестнадцатиядерном узле может быть сопоставимо (или равно) с четырёхъядерным, при использовании четырёх одноядерных процессоров в узле. Очевидно, что причина этого заключается в величине задержек при доступе процессора к оперативной памяти. Заключение В ходе исследований было рассмотрено решение задачи перемножения матриц. Использование в каждом процессоре свыше одного ядра не дало сопоставимого увеличения производительности. Это говорит о том, что существует узкое место в подсистеме памяти процессора. Поэтому, в некоторых случаях, использование большого числа ядер может являться нецелесообразным. Так, например, при покупке программного обеспечения, стоимость которого исчисляется в зависимости от задействованных процессоров, наиболее оптимальное отношение цена/производительность будет получено при покупке 4 лицензий на узел. Библиографические ссылки 1. Корж А.А. Исследование производительности многоядерных процессоров на тестах с нерегулярным доступом к памяти // Научный сервис в сети Интернет: масштабируемость, параллельность, эффективность: Труды Всероссийской суперкомпьютерной конференции (21-26 сентября 2009 г., г. Новороссийск).- М.: Изд-во МГУ, 2009. – С.168-172 2. Кудрявцев М.В., Мошкин Д.В., Полунин М.А., Эйсымонт Л.К. Оценочное тестирование кластеров на базе процессоров AMD BARCELONA и SHANGHAI с сетями Infiniband DDR и QDR // Вычислительные методы и программирование / изд-во НИВЦ МГУ. – 2009. С.69-77. 4