Нижегородский государственный университет им. Н.И.Лобачевского Факультет Вычислительной математики и кибернетики Параллельные численные методы Применение технологии Cilk для решения СЛАУ Кутилов Е., Генералова Е. Содержание Постановка задачи Разложение Холецкого Обратный ход Трудоемкость Оценка эффективности Блочный алгоритм Параллельный алгоритм Результаты вычислительных экспериментов Заключение Применение технологии Cilk для решения СЛАУ 2 Постановка задачи Рассмотрим систему из n линейных алгебраических уравнений вида: В матричном виде: А - вещественная матрица размера n x n, b, x - вектора размерности n. Применение технологии Cilk для решения СЛАУ 3 Разложение Холецкого Разложение Холецкого – представление матрицы A в виде A = LLT, где L — нижняя треугольная матрица со строго положительными элементами на диагонали (lij >0). Необходимое условие: Матрица A – симметричная: Матрица А - положительно-определённая: Применение технологии Cilk для решения СЛАУ 4 Последовательный алгоритм Элементы матрицы L вычисляются по следующим формулам: , если j < i. Применение технологии Cilk для решения СЛАУ 5 Обратный ход Если разложение получено, то решение системы сводится к последовательному решению двух линейных систем уравнений с треугольными матрицами: Ly=b, LTx=y Решение этих систем находится по формулам обратного хода метода Гаусса: Применение технологии Cilk для решения СЛАУ 6 Трудоемкость Общее время работы метода оценивается кубической трудоемкостью O(n3). Обратный ход оценивается квадратичной трудоемкостью O(n2). Применение технологии Cilk для решения СЛАУ 7 Оценка эффективности На практике часто необходимо решить: Ax=B, где B матрица правых частей. Матрицу A необходимо факторизовать один раз для всех правых частей. После факторизации решение каждой системы занимает квадратичное время. Таким образом, трудоемкость становиться близкой к квадратичной (за счет многократного применения обратного хода). Применение технологии Cilk для решения СЛАУ 8 Блочный алгоритм Недостаток классического алгоритма – плохая локализация обращения к памяти, как следствие медленная работа алгоритма. Избежать это можно использованием блочного алгоритма работы с матрицами. Это позволяет добиться большей локализации данных, что в дальнейшем поможет в распараллеливании алгоритма. Применение технологии Cilk для решения СЛАУ 9 Блочный алгоритм Фактор матрицы A вычисляется по формулам: , если j < i. где q = n / r - количество блоков Извлечение корня соответствует выполнению разложения Холецкого. Операция Ljj-1 соответствует нахождению обратной матрицы для Ljj. Применение технологии Cilk для решения СЛАУ 10 Параллельный алгоритм В основу положен принцип распараллеливания по данным. Распараллеливание возможно для следующих вычислительных процедур: вычисление диагонального элемента Lii вычисление элементов i-ой строки выполнение матричного умножения Параллельная версия выполнена с использованием технологии Intel® Cilk Plus. Применение технологии Cilk для решения СЛАУ 11 Вычисление диагонального элемента L , где Распараллеливание: Применение технологии Cilk для решения СЛАУ 12 Вычисление элементов i-ой строки , если j < i, где Распараллеливание: Применение технологии Cilk для решения СЛАУ 13 Блочное умножение Пусть дано блочное представление матрицы A и матрицы B, тогда их произведение C может быть также представлено в блочном виде: где Применение технологии Cilk для решения СЛАУ 14 Выполнение матричного умножения 5 1 2 3 4 6 х = 7 8 Распараллеливание: 1 х 5 = 1 2 х 6 = 2 - временная матрица, используемая для хранения промежуточного результата. 1 = 3 х 7 = 3 4 х 8 = 4 + Применение технологии Cilk для решения СЛАУ 2 + 3 + 4 15 Сilk_for Применение технологии Cilk для решения СЛАУ 16 Reducer Класс Monoid, реализующий моноид, для работы с редьюсером. Этот класс содержит следующие функции: reduce (T *left, T *right) вычисляет *left = *left OP *right, identity (T *p) создаёт нейтральный элемент в области памяти, на которую указывает p, destroy (T *p) вызывает деструктор для объекта, на который указывает p, Применение технологии Cilk для решения СЛАУ 17 Сilk_for Применение технологии Cilk для решения СЛАУ 18 Reducer Базовый тип, определяющий необходимые параметры для исходной матрицы, - класс MyStruct. Применение технологии Cilk для решения СЛАУ 19 Reducer Реализация функции reduce (T *left, T *right) Применение технологии Cilk для решения СЛАУ 20 Reducer Класс – оболочка, для упрощенной работы с редьюсером, содержит : cilk::reducer< myMonoid > * imp Методы доступа и изменения: reducerAddMatrix ( int size_A, double* &A ); void Op ( int sizeBlock, int startIndexA, int numberRowsA, int numberColumnsA, double* temp_A ); Применение технологии Cilk для решения СЛАУ 21 Reducer Объявление и начальная инициализация редьюсера: reducerAddMatrix C(size, A); Применение технологии Cilk для решения СЛАУ 22 Reducer Реализация функции Op (): Применение технологии Cilk для решения СЛАУ 23 Reducer Использование редьюсера на примере нахождения диагонального элемента матрицы L: Применение технологии Cilk для решения СЛАУ 24 Результаты экспериментов Применение технологии Cilk для решения СЛАУ 25 Тестовая инфраструктура Процессор Intel Core 2 Quad Q6600 Память 4 GB Операционная система Microsoft Windows 7 Среда разработки Microsoft Visual Studio 2008 Компилятор, профилировщик, отладчик Intel Parallel Studio XE Библиотеки Intel® MKL Intel® Cilk Plus Применение технологии Cilk для решения СЛАУ 26 Методы тестирования программной реализации Анализ корректности разработанной программной реализации разложения Холецкого производится путем сравнения с эталонной версией из библиотеки Intel Kernel Library (MKL). Оценкой производительности является общее время решения поставленной задачи. Применение технологии Cilk для решения СЛАУ 27 Результаты вычислительных экспериментов Сравнение последовательного алгоритма с блочным алгоритмом при различных размерах блоков с использованием умножения матриц по определению. Время выполнения 160 140 Cholesky 120 Размер блока Холецкого: 100 50 80 60 150 40 20 250 0 1000 2000 3000 4000 5000 6000 7000 8000 Размер матрицы Применение технологии Cilk для решения СЛАУ 28 Результаты вычислительных экспериментов Сравнение последовательного алгоритма с блочным алгоритмом (размер блока 50) с использованием блочного алгоритма умножения матриц при различных размерах блоков. 180 Время выполнения 160 Cholesky Размер блока: 140 10 120 100 20 80 30 60 40 40 20 50 0 1000 2000 3000 4000 5000 Размер матрицы 6000 Применение технологии Cilk для решения СЛАУ 7000 8000 29 Результаты вычислительных экспериментов Сравнение последовательной и параллельных версий. 80 MKLSeq Время выполнения 70 60 CholeskyBlock (choleskyBlock = 50, multBlock = 50) 50 CholeskyParallel (choleskyBlock = 50, multBlock = 50) 40 30 CholeskyMultParallel (choleskyBlock = 375, multBlock = 50) 20 10 0 1000 2000 3000 4000 5000 Размер матрицы 6000 Применение технологии Cilk для решения СЛАУ 7000 8000 CholeskyParallelAND MultParallel (choleskyBlock = 100, multBlock = 50) 30 Результаты вычислительных экспериментов Ускорение лучшей параллельной реализации алгоритма относительно последовательного алгоритма на размере 8000. 12 11,37 10 Ускорение 8 5,7 6 4 4 2 1,83 1 0 Cholesky CholeskyBlock CholeskyParallel (choleskyBlock = 50, (choleskyBlock = 100, multBlock = 50) multBlock = 50) Применение технологии Cilk для решения СЛАУ MKLSeq MKLParallel 31 Заключение В ходе работы изучены расширенные возможности технологии Cilk Plus – создание собственных редьюсеров данных. Реализовано несколько программных модификаций алгоритма разложения Холецкого. Для параллельной модификации алгоритма Холецкого разработаны собственные редьюсеры. Наиболее эффективная реализация алгоритма показала отставание от MKL в 3 раза. Применение технологии Cilk для решения СЛАУ 32 Вопросы ? Применение технологии Cilk для решения СЛАУ 33