<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?action=history&amp;feed=atom&amp;title=Givens_method%2C_locality</id>
	<title>Givens method, locality - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?action=history&amp;feed=atom&amp;title=Givens_method%2C_locality"/>
	<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=Givens_method,_locality&amp;action=history"/>
	<updated>2026-10-22T21:28:32Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=Givens_method,_locality&amp;diff=29086&amp;oldid=prev</id>
		<title>ASA: Новая страница: «{{level-i}}  Основные авторы описания: Вад.В.Воеводин (#Описание локальности...»</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=Givens_method,_locality&amp;diff=29086&amp;oldid=prev"/>
		<updated>2022-07-08T13:23:45Z</updated>

		<summary type="html">&lt;p&gt;Новая страница: «{{level-i}}  Основные авторы описания: &lt;a href=&quot;/ru/%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:VadimVV&quot; title=&quot;Участник:VadimVV&quot;&gt;Вад.В.Воеводин&lt;/a&gt; (#Описание локальности...»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{level-i}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: [[Участник:VadimVV|Вад.В.Воеводин]] ([[#Описание локальности данных и вычислений|раздел 2]]).&lt;br /&gt;
&lt;br /&gt;
= Ссылки =&lt;br /&gt;
&lt;br /&gt;
Основной фрагмент реализации, с помощью которого были получены количественные оценки, приведен [https://gitlab.srcc.msu.ru/shvets.pavel.srcc/locality/blob/master/benchmarks/givens/givens.h здесь] (функция Kernel).&lt;br /&gt;
&lt;br /&gt;
= Локальность данных и вычислений =&lt;br /&gt;
== Локальность реализации алгоритма ==&lt;br /&gt;
=== Структура обращений в память и качественная оценка локальности ===&lt;br /&gt;
&lt;br /&gt;
[[file:givens_1.png|thumb|center|700px|Рисунок 1. Метод Гивенса (вращений) QR-разложения квадратной матрицы (вещественный вариант). Общий профиль обращений в память]]&lt;br /&gt;
&lt;br /&gt;
На рис. 1 представлен профиль обращений в память для реализации вещественного варианта метода Гивенса (вращений) QR-разложения квадратной матрицы. Данный профиль состоит из обращений к одному двумерному массиву, в котором хранится  матрица значений. Из данного графика можно увидеть наличие однотипных итераций, из которых профиль и состоит. &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-я итерация затрагивает элементы массива, начиная с &amp;lt;math&amp;gt;(i-1)*k&amp;lt;/math&amp;gt;, то есть после каждой итерации первые &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; элементов (значение &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; нам пока неизвестно) больше не рассматриваются. Каждая итерация состоит из двух параллельно выполняемых частей – последовательного перебора всех элементов, начиная с &amp;lt;math&amp;gt;(i-1)*k&amp;lt;/math&amp;gt;, и активного использования первых &amp;lt;math&amp;gt;i*k&amp;lt;/math&amp;gt; элементов. &lt;br /&gt;
&lt;br /&gt;
Исходя из общей картины, можно сказать, что локальность данного профиля достаточно высока – обращения к близко расположенным в памяти элементам расположены в программе рядом, а также есть хорошо локализованные части с частым повторным использованием данных. Однако, чтобы убедиться в этом, необходимо более детальное рассмотрение.&lt;br /&gt;
&lt;br /&gt;
На рис. 2 представлен фрагмент общего профиля, выделенный зеленым цветом. Можно увидеть, что обе параллельно выполняемые части на каждой итерации состоят из небольших участков, похожих на обычный последовательный перебор. Явно видна регулярная структура – все участки одинакового размера и расположены на одинаковом расстоянии. &lt;br /&gt;
&lt;br /&gt;
[[file:givens_2.png|thumb|center|700px|Рисунок 2. Выделенный фрагмент общего профиля]]&lt;br /&gt;
&lt;br /&gt;
Рассмотрим фрагмент на рис. 2 более подробно (рис. 3). Здесь уже видны отдельные обращения, и теперь можно с уверенностью сказать, что каждый участок представляет собой последовательный перебор небольшого числа элементов. При этом в верхней части на каждом новом участке перебираются новые элементы, а в нижней – одни и те же данные. Поэтому в целом подобный фрагмент обладает высокой пространственной локальностью (обе части состоят из последовательных переборов), но средней временной локальностью (верхняя часть – очень низкой, нижняя – очень высокой локальностью).&lt;br /&gt;
&lt;br /&gt;
[[file:givens_3.png|thumb|center|700px|Рисунок 3. Фрагмент общего профиля, дальнейшее приближение]]&lt;br /&gt;
&lt;br /&gt;
Общий профиль состоит из набора таких фрагментов. При этом данные в этих фрагментах используются повторно на разных итерациях, поэтому общий профиль, скорее всего, обладает более высокой временной локальностью. Поэтому в целом можно сказать, что обращения в память в данной программе обладают высокой пространственной локальностью и достаточно неплохой временной локальностью.&lt;br /&gt;
&lt;br /&gt;
=== Количественная оценка локальности ===&lt;br /&gt;
&lt;br /&gt;
Условия запуска описаны [https://gitlab.srcc.msu.ru/shvets.pavel.srcc/locality/blob/master/README.md здесь].&lt;br /&gt;
&lt;br /&gt;
Первая оценка выполняется на основе характеристики daps, которая оценивает число выполненных обращений (чтений и записей) в память в секунду. Данная характеристика является аналогом оценки flops применительно к работе с памятью и является в большей степени оценкой производительности взаимодействия с памятью, чем оценкой локальности. Однако она служит хорошим источником информации, в том числе для сравнения с результатами по следующей характеристике cvg.&lt;br /&gt;
&lt;br /&gt;
На рисунке 4 приведены значения daps для реализаций распространенных алгоритмов, отсортированные по возрастанию (чем больше daps, тем в общем случае выше производительность). Можно увидеть, что производительность работы с памятью достаточно высока для этой программы, что соответствует нашим представлениям согласно изученной локальности. &lt;br /&gt;
&lt;br /&gt;
[[file:givens_daps.png|thumb|center|700px|Рисунок 4. Сравнение значений оценки daps]]&lt;br /&gt;
&lt;br /&gt;
Вторая характеристика – cvg – предназначена для получения более машинно-независимой оценки локальности. Она определяет, насколько часто в программе необходимо подтягивать данные в кэш-память. Соответственно, чем меньше значение cvg, тем реже это нужно делать и тем лучше локальность. &lt;br /&gt;
&lt;br /&gt;
На рисунке 5 приведены значения cvg для того же набора реализаций, отсортированные по убыванию (чем меньше cvg, тем в общем случае выше локальность). Можно увидеть, что, как и daps, cvg показывает достаточно хороший результат, тем самым подтверждая качественную оценку, описанную выше.&lt;br /&gt;
&lt;br /&gt;
[[file:givens_cvg.png|thumb|center|700px|Рисунок 5. Сравнение значений оценки cvg]]&lt;br /&gt;
&lt;br /&gt;
= Масштабируемость алгоритма и его реализации =&lt;br /&gt;
== Масштабируемость алгоритма ==&lt;br /&gt;
== Масштабируемость реализации алгоритма ==&lt;br /&gt;
= Динамические характеристики и эффективность реализации алгоритма =&lt;br /&gt;
= Результаты прогонов =&lt;br /&gt;
&lt;br /&gt;
[[Категория:Статьи в работе]]&lt;br /&gt;
&lt;br /&gt;
[[En:Givens method, locality]]&lt;/div&gt;</summary>
		<author><name>ASA</name></author>
	</entry>
</feed>