Участник:Error0x0/Алгоритм Ланцоша для арифметики с плавающей точкой с полной переортогонализацией: различия между версиями
Error0x0 (обсуждение | вклад) |
Error0x0 (обсуждение | вклад) |
||
Строка 87: | Строка 87: | ||
== Существующие реализации алгоритма == | == Существующие реализации алгоритма == | ||
− | Библиотека [ | + | Библиотека [http://www.nag.co.uk/numeric/fl/nagdoc_fl23/html/INDEXES/KWIC/lanczos.html NAG Library] содержит ряд процедур для решения СЛАУ и поиска собственных значений на основе алгоритма Ланцоша. |
− | + | [http://www.mathworks.com/help/techdoc/ref/eigs.html MATLAB] и [https://www.gnu.org/software/octave/doc/interpreter/Sparse-Linear-Algebra.html#doc_002deigs GNU Octave] позволяют с помощью функции ''eigs()'' находить собственные значения на основе данного алгоритма. | |
− | Matlab-реализация доступна как часть [http://www.cs.cmu.edu/~bickson/gabp/#download Gaussian Belief Propagation Matlab Package]. | + | Matlab-реализация доступна как часть [http://www.cs.cmu.edu/~bickson/gabp/#download Gaussian Belief Propagation Matlab Package]. [http://www.graphlab.ml.cmu.edu/pmf.html GraphLab] содержит несколько параллельных реализаций алгоритма на C++. |
= Литература = | = Литература = |
Версия 23:18, 15 октября 2016
Содержание
- 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 Общее описание алгоритма
Алгоритм Ланцоша представляет собой итерационный алгоритм для вычисления собственных значений симметрической матрицы. Идея алгоритма заключается в построении матрицы [math]Q_k = [q_1, ..., q_k][/math] из ортонормированных векторов Ланцоша и нахождении собственных значений трёхдиагональной матрицы [math]T_k = Q_k^T A Q_k[/math].
1.2 Математическое описание алгоритма
Пусть дана матрица [math]A[/math]. Пусть [math]q_1 = b/||b||_2, \beta_0=0, q_0=0[/math] Алгоритм производит [math]k[/math] итераций на каждой из которых:
- вычисляется [math]z = Aq_j[/math],
- производится переортогонализация [math]z = z - \sum^{j-1}_{i=1} {(z^T q_i)q_i}[/math],
- [math]\beta_j = ||z||_2[/math], если [math]\beta_j = 0[/math], алгоритм останавливается,
- [math]q_j+1 = z/\beta_j[/math],
- вычисляются собственные значения и векторы матрицы [math]T_j = Q_j^T A Q_j[/math].
1.3 Вычислительное ядро алгоритма
Основной вклад в сложность алгоритма даёт полная переортогонализация
1.4 Макроструктура алгоритма
Основные элементы алгоритма:
- Нахождение векторов Ланцоша
- Полная переортогонализация (Грамма-Шмидта)
- Вычисление собственных значений и векторов матрицы [math]T_j[/math] (числа Ритца)
1.5 Схема реализации последовательного алгоритма
q[1] = b / norm(b)
beta[0] = 0
q[0] = 0
for j in [1 .. k]:
z = mul(A, q[j])
zT = transposed(z)
for i in [1 .. j - 1]:
z -= mul(scalar_mul(zT, q[i]), q[i])
beta[j] = norm(z)
if beta[j] == 0:
break
result = ritz_numbers(mul(transpose(Q[j]), A, Q[j]))
return result
1.6 Последовательная сложность алгоритма
Для метода с полной переортогонализацией сложность составляет [math]O(k^2 n)[/math], сложность по памяти -- [math]O(kn)[/math].
1.7 Информационный граф
1.8 Ресурс параллелизма алгоритма
Для процесса переортогонализации возможна параллельная оптимизация в двух местах:
- Итерации внутреннего цикла могут вычисляться параллельно, однако, требуется суммирование вычитаемых векторов, соответственно, сложность переортогонализации можно снизить с [math]O(kn)[/math] до [math]O(n \log k)[/math]
- В каждой итерации внутреннего цикла возможно распараллеливание вычисления выражения справа (скалярное произведение и умножение вектора на число), что теоретически позволяет снизить сложность итерации с [math]O(n)[/math] до [math]O(log(n))[/math]
1.9 Входные и выходные данные алгоритма
Входные данные: квадратная симметрическая матрица [math]A[/math] порядка [math]n[/math]
Объём входных данных: [math]n^2[/math]
Выходные данные: собственные числа матрицы
Объём выходных данных: [math]n[/math]
1.10 Свойства алгоритма
Полная переортогонализация соответствует повторной процедуре ортогонализациии Грама-Шмидта для обеспечения ортогональности вектора [math]z[/math] векторам [math]q_1, ..., q_k[/math]. В случае идеально точной арифметики данная переортогонализация не требовалась бы, однако в реальных вычислениях ошибки округления приводят к потере ортогональности, в связи с чем требуется переортогонализация. Однако, единственной проблемой, возникающей при отсутствии переортогонализации, является появление повторных копий чисел Ритца (собственных значений), что в случае, если не требуется установление кратностей собственных значений, допустимо.
2 ЧАСТЬ. Программная реализация алгоритма
2.1 Особенности реализации последовательного алгоритма
2.2 Локальность данных и вычислений
2.3 Возможные способы и особенности параллельной реализации алгоритма
2.4 Масштабируемость алгоритма и его реализации
2.5 Динамические характеристики и эффективность реализации алгоритма
2.6 Выводы для классов архитектур
2.7 Существующие реализации алгоритма
Библиотека NAG Library содержит ряд процедур для решения СЛАУ и поиска собственных значений на основе алгоритма Ланцоша.
MATLAB и GNU Octave позволяют с помощью функции eigs() находить собственные значения на основе данного алгоритма.
Matlab-реализация доступна как часть Gaussian Belief Propagation Matlab Package. GraphLab содержит несколько параллельных реализаций алгоритма на C++.
3 Литература
[1] Воеводин В.В., Воеводин Вл.В. Параллельные вычисления. - СПб.: БХВ-Петербург, 2002. - 608 с.
[2] Воеводин В.В., Воеводин Вад.В. Спасительная локальность суперкомпьютеров //Открытые системы. - 2013. - № 9. - С. 12-15.
[3] Воеводин Вад.В., Швец П. Метод покрытий для оценки локальности использования данных в программах // Вестник УГАТУ. — 2014. — Т. 18, № 1(62). — С. 224–229.
[4] Антонов А.С., Теплов А.М. О практической сложности понятия масштабируемости параллельных программ// Высокопроизводительные параллельные вычисления на кластерных системах (HPC 2014): Материалы XIV Международной конференции -Пермь: Издательство ПНИПУ, 2014. С. 20-27.
[5] Никитенко Д.А. Комплексный анализ производительности суперкомпьютерных систем, основанный на данных системного мониторинга // Вычислительные методы и программирование. 2014. 15. 85–97.