Участник:Yastrebovks/Алгоритм Ланцоша с полной переортогонализацией
Алгоритм Ланцоша с полной переортогонализацией | |
Последовательный алгоритм | |
Последовательная сложность | O(n^2)+O(nk^2) |
Объём входных данных | \frac{n(n + 1)}{2} |
Объём выходных данных | k(n + 1) |
Авторы: Алексейчук Н.Н 616, Ястребов К.С. 609. Авторы внесли равнозначный вклад в каждый из разделов данной статьи.
Содержание
- 1 Свойства и структура алгоритма
- 1.1 Общее описание алгоритма.
- 1.2 Математическое описание алгоритма
- 1.3 Вычислительное ядро алгоритма
- 1.4 Макроструктура алгоритма
- 1.5 Схема реализации последовательного алгоритма
- 1.6 Последовательная сложность алгоритма
- 1.7 Информационный граф
- 1.8 Ресурс параллелизма алгоритма
- 1.9 Входные и выходные данные алгоритма
- 1.10 Свойства алгоритма
- 2 Программная реализация алгоритма
- 2.1 Особенности реализации последовательного алгоритма
- 2.2 Локальность данных и вычислений
- 2.3 Возможные способы и особенности параллельной реализации алгоритма
- 2.4 Масштабируемость алгоритма и его реализации
- 2.5 Динамические характеристики и эффективность реализации алгоритма
- 2.6 Выводы для классов архитектур
- 2.7 Существующие реализации алгоритма
- 3 Литература
1 Свойства и структура алгоритма
1.1 Общее описание алгоритма.
Алгоритм Ланцоша ищет собвственные значения и собственные векторы для симетричной матрицы A вещественных чисел. Является итерацонным алгоритмом. Алгоритм Ланцоша использует степенной метод ( b_{k+1} = \frac{Ab_k}{||Ab_k||} ) для поиска наибольших собственных значений и векторов матриц.
В отличие от прямых алгоритмов требует мешьше памяти и мощности, что является несомненным плюсом для больших матриц.
Несмотря на свою скорость работы и экономию памяти, сначала не был популярным алгоритмом из – за недостаточной вычислительной устойчивости. В 1970 году Ojalvo и Newman [1] показали способ сделать алгоритм достаточно устойчивым. В этой же статье алгоритм был применен к расчету инженерной конструкции с большим количеством узлов, которые подвергались динамической нагрузке.
1.2 Математическое описание алгоритма
Памятка: Степенной метод нахождения наибольшего собственного числа матрицы можно сформулировать в предельном виде: если b_0 – случайный вектор, и b_n+1 = Ab_n , тогда для больших чисел n предел x_n/||x_n|| стремится к нормированному наибольшему собственному вектору.
Алгоритм Ланцоша комбинирует метод Ланцоша для нахождения крыловского подпространства и метод Релэя – Ритца.
Подпространство Крылова для степенного метода: K_m(v,A) = span[x_1, Ax_1, A^2x_1, ..., A^{k-1}x_1]
В качестве входных данных для алгоритма Ланцоша подаются квадратная матрица размерности nXn: A=A^T; а так же вектор начального приближения b.
Метод осуществляет поиск трехдиагональной симметричной матрицы T_k=Q_k^TAQ_k.
Таким образом матрица T_k=\begin{bmatrix} \alpha_1 & \beta_2 \\ \beta_2 & \alpha_2 & \beta_3 &\\ &. & . & .\\ &&\beta_{k-1} & \alpha_{k-1} & \beta_k\\ &&&\beta_k & \alpha_k \end{bmatrix}
Причем собственные значения T_k таковы, что приближают собственные значения исходной матрицы A. То есть на каждом k-м шаге из ортонормированных векторов Ланцоша строится матрица Q_k = [q_1,q_2,...,q_k] и в качестве приближенных собственных значений матрицы A принимаются числа Ритца.
Из-за ошибок округления вектора A^{k-1}x_1 , формирующие подпространство Крылова, становятся неортогональными. Чтобы решить данную прорблему, проводят переортогонализацию методом Грамма-Шмидта.
1.3 Вычислительное ядро алгоритма
Вычислительным ядром данного алгоритма являются следующие шаги:
- 1. Aq=( \sum\nolimits_{i=^n}a_{1i}q_i, \sum\nolimits_{i=2}^na_{2i}q_i, ..., \sum\nolimits_{i=1}^na_{ni}q_i).
- 2. z=z-\sum\nolimits_{i=1}^{k}(z^Tq_i)q_i.
В данном случае первая операция выполняет умножение симметричной матрицы A размерности nXn на n-мерный вектор q, вследствие чего вычислительная сложность выполнения заключается в n^2 умножений и n^2-n сложений. Второе действие является процессом ортогонализации Грама-Шмидта. В последнем действии вычисляются k^2n+k(n+2) умножений и k^2n + k(n + 1) + 2 операций сложения.
1.4 Макроструктура алгоритма
Основные операции:
- 1. умножение матрицы на вектор b=Ax.
- 2. ортогонализация методом Грмма-Шмидта.
- 3. вычисление нового вектора q_{i+1} = z/ \beta.
1.5 Схема реализации последовательного алгоритма
\begin{array}{l} \mathtt{input:}\; A, b, k\\ q_1 = b / \Vert b \Vert_2\\ Q = q_1\\ \mathtt{for}\; j = \overline{1, k}:\\ \quad z = A q_j \\ \quad \alpha_j = q_j^T z \\ \quad z = z - Q \left( Q^T z \right) \\ \quad z = z - Q \left( Q^T z \right)\\ \quad \beta_j = \Vert z \Vert_2\\ \quad \mathtt{if }\; \beta_j = 0\\ \quad \quad \mathtt{exit}\\ \quad \mathtt{end \; if}\\ \quad q_{j+1} = z/\beta_j\\ \quad Q = [Q, q_{j + 1}]\\ \mathtt{end \; for}\\ \mathtt{output:}\; [\alpha_1, \dots, \alpha_k], [\beta_1, \dots, \beta_{k - 1}], [q_1, \dots, q_k]. \end{array}
Рассмотрим подробнее все шаги данного алгоритма:
1.z=Aq_j,
Вычисляется диагональный элемент конечной матрицы T_k,
2.\alpha_j=q_j^Tz,
Далее дважды проводится полная переортогонализация по Грамму-Шмидту. Данные действия необходимы для гарантии ортогональности базиса.
3.z =z-\sum\nolimits_{i=1}^{j-1}(z^Tq_i)q_i,
4.z=z-\sum\nolimits_{i=1}^{j-1}(z^Tq_i)q_i,
5.z=z-\alpha_jq_j-\beta_{j}q_{j-1},
Далее вычисляются недостающие элементы матрицы T_k.
6.\beta_{j+1}=||z||,
Если \beta_{j+1}=0, то алгоритм завершается.
7.q_{j+1}=z/\beta_{j+1}.
В конце каждой итерации получаем очередной вектор q_{j+1} базиса с единичной нормой, который ортогонален всем предыдущим векторам базиса,
и элементы \alpha_j, \beta_{j+1} трехдиагональной матрицы T_k .
Кроме того, заметим, что очень часто в макрооперациях возникает операция вычисления суммы всех элементов массива. Её необходимо выполнять и при умножении матрицы на вектор, и при вычислении скалярного произведения, и при вычислении нормы вектора. Разные методы суммирования дают разный ресурс параллелизма. В этой работе предполагается, что везде для суммирования используется последовательный способ.
1.6 Последовательная сложность алгоритма
Количество операций складывается из количества операций для классического метода Ланцоша[2] и количества операций для переортогонализации методом грамма-Шмидта[3].
Итоговая сложность составляет O(n^2)+O(nk^2) .
1.7 Информационный граф
Троеточием в данном алгоритме обозначаются операции, выполняющиеся для всех элементов от i=1..n.
1.8 Ресурс параллелизма алгоритма
Хотя алгоритм является итерационным, возможно распараллелить внутри каждой итерации умножение матрицы на вектор и процесс переортогонализации Грамма-Шмидта.
Процесс умножения матриц matvec можно распараллелить несколькими способами[4].
Как видно из графа, для выполнения j-й операции, необходимо выполнить следующие ярусы:
- n ярусов сложений с n операциями умножения в каждом (вычисление z);
- n ярусов сложений с 1 операцией умножения в каждом (вычисление \alpha_j);
- j ярусов сложений с n операциями умножения в каждом, n ярусов сложений с j операциями умножения в каждом, 1 ярус вычитаний размера n (первая переортогонализация);
- j ярусов сложений с n операциями умножения в каждом, n ярусов сложений с j операциями умножения в каждом, 1 ярус вычитаний размера n (вторая переортогонализация);
- n ярусов сложений с 1 операцией умножения в каждом (вычисление \beta_j);
- 1 ярус делений размера n (вычисление q_{j + 1}).
Если учесть весь ресурс параллелизма можно получить сложность O(k).
1.9 Входные и выходные данные алгоритма
На вход принимается сама матрица A \in R^{n \times n}, случайный вектор b (впрочем возможен вариант, при котором этот вектор генерируется случайным образом). Ввиду симметричности входной матрицы достаточно передать лишь ее верхнюю треугольную матрицу, что дает объем входных данных \frac{n(n + 1)}{2}.
Выходными данными для jой итерации являются вектор Aq_j и собственное число \lambda . Общий объем выходных данных k(n+1).
1.10 Свойства алгоритма
Если A эрмитова матрица, то алгоритм Ланцоша и Bi-Lanczos сходятся к одинаковым трехдиагональным матрицам ритца[5].
При реализации классического алгоритма Ланцоша возникает большая погрешность при округлении. Вариант с полной переортогонализацией позволяет избегать больших погрешностей, однако является более ресурсоемким. Существует промежуточный вариант с частичной переортогонализацией.
Алгоритм может завершить свою работу досрочно, когда найденные собственные значения будут достаточно близки к целевым.
2 Программная реализация алгоритма
2.1 Особенности реализации последовательного алгоритма
2.2 Локальность данных и вычислений
2.3 Возможные способы и особенности параллельной реализации алгоритма
2.4 Масштабируемость алгоритма и его реализации
Исследование масштабируемости реализации алгоритма проводилось с использованием стандарта MPI на суперкомпьютере "Ломоносов".
Набор изменяемых параметров запуска реализации алгоритма и границы значений параметров алгоритма:
- Число процессоров 1,2,4,8,16,32,64,96,128
- Размерность матрицы 1000:15000,1700,21000,25000,30000
- Количество итераций 500
2.5 Динамические характеристики и эффективность реализации алгоритма
2.6 Выводы для классов архитектур
2.7 Существующие реализации алгоритма
The IETL Project http://www.comp-phys.org/software/ietl/ C++
NAG Library http://www.nag.com/content/nag-library C, C++, Fortran, C#, MATLAB, R
ARPACK https://people.sc.fsu.edu/~jburkardt/m_src/arpack/arpack.html MATLAB
GrapLab https://turi.com/products/create/open_source.html C++
С частичной переортаганализацией
LANSO/PLANSO http://web.cs.ucdavis.edu/~bai/ET/lanczos_methods/overview_PLANSO.html Fortran (уже распараллелена)
3 Литература
Ojalvo, I.U. and Newman, M., "Vibration modes of large structures by an automatic matrix-reduction method", AIAA J., 8 (7), 1234–1239 (1970).