Итерация алгоритма dqds: различия между версиями
[выверенная версия] | [непроверенная версия] |
ASA (обсуждение | вклад) |
Ikramov (обсуждение | вклад) |
||
Строка 27: | Строка 27: | ||
==== Вспомогательные сведения ==== | ==== Вспомогательные сведения ==== | ||
Для понимания математических основ dqds-итерации полезно рассмотреть кратко её вывод, частично отражающий и историю возникновения алгоритма (подробности можно найти в <ref name="vla"/>). | Для понимания математических основ dqds-итерации полезно рассмотреть кратко её вывод, частично отражающий и историю возникновения алгоритма (подробности можно найти в <ref name="vla"/>). | ||
− | За основу dqds-алгоритма удобно взять так называемую LR-итерацию, предшествующую хорошо-известной QR-итерации. LR-алгоритм, начиная с входной матрицы <math>T_0>0,</math> строит сходящуюся последовательность подобных <math>T_0</math> матриц <math>T_i>0,</math> итерационно используя следующие три шага: | + | За основу dqds-алгоритма удобно взять так называемую LR-итерацию, предшествующую хорошо-известной QR-итерации. LR-алгоритм, начиная с входной положительно определенной матрицы <math>T_0>0,</math> строит сходящуюся последовательность подобных <math>T_0</math> матриц <math>T_i>0,</math> итерационно используя следующие три шага: |
#Выбрать сдвиг <math>\tau_i</math> меньший младшего собственного значения <math>T_i.</math> | #Выбрать сдвиг <math>\tau_i</math> меньший младшего собственного значения <math>T_i.</math> | ||
#Вычислить разложение Холецкого <math>T_i-\tau^2_iI=B_i^TB_i,</math> где <math>B_i</math> - верхняя треугольная матрица с положительной диагональю. | #Вычислить разложение Холецкого <math>T_i-\tau^2_iI=B_i^TB_i,</math> где <math>B_i</math> - верхняя треугольная матрица с положительной диагональю. |
Версия 11:07, 28 октября 2017
Алгоритм dqds нахождения сингулярных чисел двухдиагональной матрицы | |
Последовательный алгоритм | |
Последовательная сложность | [Math Processing Error] |
Объём входных данных | [Math Processing Error] |
Объём выходных данных | [Math Processing Error] |
Параллельный алгоритм | |
Высота ярусно-параллельной формы | [Math Processing Error] |
Ширина ярусно-параллельной формы | [Math Processing Error] |
Основные авторы описания: А.Ю.Чернявский
Содержание
- 1 Свойства и структура алгоритмов
- 1.1 Общее описание алгоритма
- 1.2 Математическое описание алгоритма
- 1.3 Вычислительное ядро алгоритма
- 1.4 Макроструктура алгоритма
- 1.5 Схема реализации последовательного алгоритма
- 1.6 Последовательная сложность алгоритма
- 1.7 Информационный граф
- 1.8 Ресурс параллелизма алгоритма
- 1.9 Входные и выходные данные алгоритма
- 1.10 Свойства алгоритма
- 2 Программная реализация алгоритмов
- 3 Литература
1 Свойства и структура алгоритмов
1.1 Общее описание алгоритма
Итерация алгоритма dqds является одним шагом алгоритма dqds нахождения сингулярных чисел двухдиагональной матрицы.
Сам алгоритм dqds (differential quotient-difference algorithm with shifts)[1][2] строит последовательность двухдиагональных матриц, сходящуюся к диагональной матрице, содержащей квадраты искомых сингулярных чисел. Его особенностью является высокая точность решения задачи. Вычислительным ядром алгоритма является именно внутренняя итерация, вне итераций происходит подбор сдвига [Math Processing Error] (параметер итерации, см. математическое описание алгоритма), отслеживание сходимости, а также применение различных оптимизационных "хитростей". Отметим, что внеитерационная часть алгоритма не существенна с точки зрения структуры вычислений, т.к. основные затраты ложатся на вычисления внутри итерации. Подробности и варианты внеитерационной части, а также анализ сходимости можно найти в соответствующей литературе [3] [4] [5].
1.2 Математическое описание алгоритма
1.2.1 Вспомогательные сведения
Для понимания математических основ dqds-итерации полезно рассмотреть кратко её вывод, частично отражающий и историю возникновения алгоритма (подробности можно найти в [1]). За основу dqds-алгоритма удобно взять так называемую LR-итерацию, предшествующую хорошо-известной QR-итерации. LR-алгоритм, начиная с входной положительно определенной матрицы [Math Processing Error] строит сходящуюся последовательность подобных [Math Processing Error] матриц [Math Processing Error] итерационно используя следующие три шага:
- Выбрать сдвиг [Math Processing Error] меньший младшего собственного значения [Math Processing Error]
- Вычислить разложение Холецкого [Math Processing Error] где [Math Processing Error] - верхняя треугольная матрица с положительной диагональю.
- [Math Processing Error]
Отметим, что два шага LR-итерации с нулевым сдвигом эквивалентны одному шагу QR-итерации. Итерационная процедура приводит матрицу к диагональному виду, тем самым вычисляя собственные значения исходной матрицы. LR-алгоритм достаточно легко может быть переформулирован с заметными упрощениями для задачи поиска сингулярных значений двухдиагональных матриц. А именно, будем вычислять последовательность двухдиагональных матриц [Math Processing Error] без непосредственного вычисления [Math Processing Error](которые в данном случае будут трехдиагональными). Пусть матрица [Math Processing Error] имеет диагональные элементы [Math Processing Error] и наддиагональные элементы [Math Processing Error], а матрица [Math Processing Error] - диагональные элементы [Math Processing Error] и наддиагональные элементы [Math Processing Error] Тогда шаг LR-итерации в терминах матриц [Math Processing Error] можно привести к простому циклу, пробегающему значения [Math Processing Error] от [Math Processing Error] до [Math Processing Error]
- [Math Processing Error]
- [Math Processing Error]
и вычислению [Math Processing Error] Очевидно, что работу с извлечением квадратов выгодно вести лишь после окончания работы алгоритма, поэтому можно ввести замену [Math Processing Error] что в итоге приводит к так называемому алгоритму qds. Формулы алгоритма следующие:
- [Math Processing Error]
- [Math Processing Error]
- [Math Processing Error]
Здесь [Math Processing Error] и [Math Processing Error] - квадраты элемнтов главной и верхней побочной диагонали соответственно. Крышка означает выходные переменные, а
[Math Processing Error] - сдвиг (параметр алгоритма). Такая математическая запись наиболее компактна и соответствует так называемой qds-итерации.
1.2.2 Математическое описание итерации алгоритма dqds
Представим теперь математическую запись, приближенную к dqds-итерации (с математической точки зрения qds и dqds-итерации эквивалентны) с введенными вспомогательными переменными
[Math Processing Error] и [Math Processing Error] Итерация алгоритма dqds преобразует входную двухдиагональную матрицу [Math Processing Error] в выходную [Math Processing Error]
Входные и выходные данные: [Math Processing Error] - квадраты элементов главной и побочной диагонали входной матрицы [Math Processing Error], [Math Processing Error] - то же для вычисляемой матрицы [Math Processing Error].
Формулы метода выглядят следующим образом:
- [Math Processing Error]
- для[Math Processing Error]
- [Math Processing Error]
- [Math Processing Error]
- [Math Processing Error]
- [Math Processing Error]
1.3 Вычислительное ядро алгоритма
Вычислительным ядром алгоритма является последовательный расчёт квадратов диагональных ([Math Processing Error]) и внедиагональных ([Math Processing Error]) элементов выходной матрицы. Учитывая использование вспомогательных переменных расчёт каждой новой пары содержит по одной операции сложения, вычитания и деления, а также две операции умножения.
1.4 Макроструктура алгоритма
Алгоритм состоит из отдельного вычисления начального значения вспомогательной переменной [Math Processing Error] последующим (n-1)-кратным выполнением повторяющейся последовательности из 5 операций (+,/,*,*,-) для вычисления квадратов диагональных ([Math Processing Error]) и внедиагональных ([Math Processing Error]) элементов выходной матрицы и завершающего вычислением крайнего значения [Math Processing Error].
1.5 Схема реализации последовательного алгоритма
Отметим, что выходные данные сразу могут быть записаны на место входных (это учтено в схеме), также для хранения вспомогательных переменных [Math Processing Error] и [Math Processing Error] достаточно двух перезаписываемых переменных. Таким образом элементы главной ([Math Processing Error]) и побочной ([Math Processing Error]) диагонали входной матрицы последовательно перезаписываются соответствующими элементами выходной матрицы.
Последовательность исполнения метода следующая:
1. Вычисляется начальное значение вспомогательной переменной [Math Processing Error]
2. Производится цикл по j от 1 до n-1, состоящий из:
- 2.1 Вычисляется значение [Math Processing Error]
- 2.2 Вычисляется значение вспомогательной переменной [Math Processing Error]
- 2.3 Вычисляется значение [Math Processing Error]
- 2.4 Вычисляется значение вспомогательной переменной [Math Processing Error]
3. Вычисляется [Math Processing Error]
Легко заметить, что можно представить вычисления в другой форме, например, в виде qds-итерации (см. Математическое описание dqds-итерации), однако, именно dqds реализация вычисления позволяет достичь высокой точности[1].
1.6 Последовательная сложность алгоритма
Для выполнения одной итерации dqds необходимо выполнить:
- [Math Processing Error] делений,
- [Math Processing Error] умножений,
- [Math Processing Error] сложений/вычитаний.
Таким образом одна dqds-итерация имеет линейную сложность.
1.7 Информационный граф
1.8 Ресурс параллелизма алгоритма
Как видно из информационного графа алгоритма, на каждом шаге основного цикла возможно лишь параллельное выполнение операции умножения (2.2) и умножения+сложения (2.4). Это позволяет сократить число ярусов на одной итерации цикла c 5 до 4, а общее число ярусов алгоритма с 5n-4 до 4n-3. Ярусы с операциями умножения состоят из двух операций, остальные же из одной.
1.9 Входные и выходные данные алгоритма
Входные данные: Квадраты элементов основной и верхней побочной диагонали двухдиагональной матрицы (вектора [Math Processing Error] длины n и [Math Processing Error] длины n-1), а также параметр сдвига [Math Processing Error].
Объём входных данных: [Math Processing Error].
Выходные данные: Квадраты элементов основной и верхней побочной диагонали выходной двухдиагональной матрицы.
Объём выходных данных: [Math Processing Error].
1.10 Свойства алгоритма
Соотношение последовательной и параллельной сложности при наличии возможности параллельного выполнения операций умножения составляет [Math Processing Error], т.е. алгоритм плохо распараллеливается.
Вычислительная мощность алгоритма, как отношение числа операций к суммарному объему входных и выходных данных - константа.
Описываемый алгоритм является полностью детерминированным.
2 Программная реализация алгоритмов
2.1 Особенности реализации последовательного алгоритма
Алгоритм на языке Matlab может быть записать так:
d = q(1)-delta;
for j = 1:n-1
q(j)=d+e(j);
t=q(j+1)/q(j);
e(j) = e(j)*t;
d = d*t-delta;
end
q(n) = d;
Как говорилось в cхеме реализации последовательного алгоритма, вычисляемые данные записываются сразу на место входных.
2.2 Локальность данных и вычислений
Легко видеть, что локальность данных высока. Её легко повысить, размещая рядом соответствующие элементы массивов e и q, однако, это не оказывает существенного влияния на производительность в силу константного количества операций относительно объема обрабатываемых данных.
2.2.1 Локальность реализации алгоритма
2.2.1.1 Структура обращений в память и качественная оценка локальности
На рис. 2 представлен профиль обращений в память для реализации итерации алгоритма dqds. Данный профиль внешне устроен очень просто и состоит из двух параллельно выполняемых последовательных переборов. Отметим, что общее число обращений в память всего в 3 раза больше числа задействованных данных, что говорит о том, что данные повторно используют редко. Зачастую это сигнализирует о достаточно невысокой локальности.
Рассмотрим более детально строение одного из переборов (второй устроен практически идентично). На рис. 3 показан выделенный на рис. 2 небольшой фрагмент 1. Видно, что на каждом шаге в данном переборе выполняется три обращения в память; подобное строение говорит о высокой пространственной локальности, однако низкой временной, поскольку данные повторно используются только по 3 раза.
Поскольку данная структура обращений и составляет общий профиль, то же самое можно говорить и о локальности всего профиля.
2.2.1.2 Количественная оценка локальности
Оценка выполняется на основе характеристики daps, которая оценивает число выполненных обращений (чтений и записей) в память в секунду. Данная характеристика является аналогом оценки flops применительно к работе с памятью и является в большей степени оценкой производительности взаимодействия с памятью, чем оценкой локальности. Однако она служит хорошим источником информации, в том числе для сравнения с результатами по следующей характеристике cvg.
На рисунке 4 приведены значения daps для реализаций распространенных алгоритмов, отсортированные по возрастанию (чем больше daps, тем в общем случае выше производительность). Результат получен достаточно неожиданный – производительность работы с памятью очень невелика. Оценка daps для данного профиля сравнима с реализациями самых неэффективных алгоритмов в части работы с памятью – тестов RandomAccess и неэффективных вариантов обычного перемножения матриц. Отчасти это может объясняться низкой временной локальностью. Однако в данном случае причина может также заключаться в том, что в данной реализации объем вычислений на одно обращение в память достаточно велик, что может приводить к недостаточной загруженности подсистемы памяти. В таком случае, несмотря на в целом неплохую эффективность работы с памятью, производительность будет достаточно низка.
2.3 Возможные способы и особенности параллельной реализации алгоритма
Итерация dqds практически полностью последовательна. Единственная возможность - одновременное выполнение операции умножения (2.3) и операции (2.4) умножения и сложения, что дает небольшой выигрыш в производительности.
2.4 Масштабируемость алгоритма и его реализации
Алгоритм не является масштабируемым, максимального эффекта ускорения можно добиться на двух независимых процессорах.
Проведём исследование масштабируемости вширь реализации согласно методике. Исследование проводилось на суперкомпьютере "Ломоносов-2" Суперкомпьютерного комплекса Московского университета.
Набор и границы значений изменяемых параметров запуска реализации алгоритма:
- число процессоров 1;
- размер матрицы [1000 : 260000] с шагом 500.
В результате проведённых экспериментов был получен следующий диапазон эффективности реализации алгоритма:
- минимальная эффективность реализации 2.559e-06%;
- максимальная эффективность реализации 2.492e-08%.
На следующих рисунках приведены графики производительности и эффективности выбранной реализации DQDS в зависимости от изменяемых параметров запуска.
Исследованная параллельная реализация на языке C
2.5 Выводы для классов архитектур
Эффективное выполнение алгоритма возможно только на вычислительных устройствах с одним или двумя ядрами.
2.6 Существующие реализации алгоритма
Сам алгоритм dqds реализован в функции xBDSQR пакета LAPACK и используется при её вызове без расчёта сингулярных векторов.
3 Литература
- ↑ Перейти обратно: 1,0 1,1 1,2 Деммель Д. Вычислительная линейная алгебра. – М : Мир, 2001.
- ↑ Hogben L. (ed.). Handbook of linear algebra. – CRC Press, 2006.
- ↑ Fernando K. V., Parlett B. N. Accurate singular values and differential qd algorithms //Numerische Mathematik. – 1994. – Т. 67. – №. 2. – С. 191-229.
- ↑ Parlett B. N., Marques O. A. An implementation of the dqds algorithm (positive case) //Linear Algebra and its Applications. – 2000. – Т. 309. – №. 1. – С. 217-259.
- ↑ Aishima K. et al. On convergence of the DQDS algorithm for singular value computation //SIAM Journal on Matrix Analysis and Applications. – 2008. – Т. 30. – №. 2. – С. 522-537.