<?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=Boruvka%27s%2C_locality</id>
	<title>Boruvka&#039;s, 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=Boruvka%27s%2C_locality"/>
	<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=Boruvka%27s,_locality&amp;action=history"/>
	<updated>2026-10-23T01:52:26Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=Boruvka%27s,_locality&amp;diff=28955&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=Boruvka%27s,_locality&amp;diff=28955&amp;oldid=prev"/>
		<updated>2022-07-05T10:45:29Z</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:Elijah&quot; title=&quot;Участник:Elijah&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;
Основные авторы описания: [[Участник:Elijah|И.В.Афанасьев]]&lt;br /&gt;
&lt;br /&gt;
= Ссылки =&lt;br /&gt;
&lt;br /&gt;
Основной фрагмент реализации, на основе которого были получены количественные оценки, приведен [https://gitlab.srcc.msu.ru/shvets.pavel.srcc/locality/-/blob/master/benchmarks/boruvka/boruvka.h здесь] (функция Kernel).&lt;br /&gt;
&lt;br /&gt;
= Локальность данных и вычислений =&lt;br /&gt;
== Локальность реализации алгоритма ==&lt;br /&gt;
=== Структура обращений в память и качественная оценка локальности ===&lt;br /&gt;
&lt;br /&gt;
[[file:boruvka_1.png|thumb|center|700px|Рисунок 1. Алгоритм Борувки. Общий профиль обращений в память]]&lt;br /&gt;
&lt;br /&gt;
На рис. 1 представлен профиль обращений в память для реализации алгоритма Борувки. Этот алгоритм, как и большинство графовых алгоритмов, обладает нерегулярной структурой. Сразу нужно отметить, что локальность реализаций таких алгоритмов во многом зависит от структуры входного графа и может существенно меняться. В данном случае мы рассматриваем лишь один из возможных вариантов.&lt;br /&gt;
&lt;br /&gt;
Можно увидеть, что общий профиль состоит из 4 достаточно схожих этапов (разделены на рис. 1 вертикальными линиями). Однако поскольку этот профиль не обладает регулярной структурой, лучше рассмотреть все этапы.&lt;br /&gt;
&lt;br /&gt;
Начнем с изучения верхней части профиля (фрагмент 1 на рис. 1), которая показана на рис. 2. На каждом этапе большую часть обращений занимает последовательный перебор всех элементов данного фрагмента (выделен на рис. 2 желтым). Остальные обращения на разных этапах устроены по-разному. Если на первом этапе эти обращения разбросаны достаточно далеко друг от друга, что приводит к низкой пространственной и временной локальности, то на последнем этапе почти все обращения (не считая последовательного перебора) выполняются к одному и тому же элементу, что, естественно, характеризуется очень высокой локальностью. Подобное строение всего фрагмента приводит, скорее всего, к средним значениям и по пространственной, и по временной локальности.&lt;br /&gt;
&lt;br /&gt;
[[file:boruvka_2.png|thumb|center|700px|Рисунок 2. Профиль обращений, фрагмент 1]]&lt;br /&gt;
&lt;br /&gt;
Далее перейдем к изучению фрагмента 2 (рис. 3). Здесь можно увидеть, что строение каждого из 4 этапов отличается достаточно сильно. Как и в случае с фрагментом 1, каждый следующий этап обладает более высокой локальностью, однако здесь это заметно сильнее. При этом отметим, что данный фрагмент задействует всего около 60 элементов, а обращений к ним выполняется достаточно много, так что локальность в данном случае будет высока.&lt;br /&gt;
&lt;br /&gt;
[[file:boruvka_3.png|thumb|center|700px|Рисунок 3. Профиль обращений, фрагмент 2]]&lt;br /&gt;
&lt;br /&gt;
В целом похожая картинка наблюдается и во фрагменте 3. На рис. 4 видны 4 этапа со схожей структурой, и также задействовано около 60 элементов, что позволяет говорить о высокой локальности данного фрагмента.&lt;br /&gt;
&lt;br /&gt;
[[file:boruvka_4.png|thumb|center|700px|Рисунок 4. Профиль обращений, фрагмент 3]]&lt;br /&gt;
&lt;br /&gt;
Отдельное рассмотрение фрагмента 4 (рис. 5) позволяет увидеть, что локальность здесь определяется 4 последовательными переборами всех элементов данного фрагмента. Эти переборы обладают стандартной структурой – шаг по памяти 1, только 1 обращение к каждому элементу; небольшое искривление данных переборов вызвано нерегулярной активностью в других фрагментах, которая приводит к искажению визуального представления профиля. Подобный набор обращений обладает высокой пространственной, но низкой временной локальностью.&lt;br /&gt;
&lt;br /&gt;
[[file:boruvka_5.png|thumb|center|500px|Рисунок 5. Профиль обращений, фрагмент 4]]&lt;br /&gt;
&lt;br /&gt;
Таким образом, фрагменты 2 и 3 характеризуются высокой локальностью, другие 2 фрагмента – средней локальностью. А поскольку большая часть обращений приходится именно на фрагменты 2 и 3, можно предположить, что общая локальность должна быть достаточно высока.&lt;br /&gt;
&lt;br /&gt;
=== Количественная оценка локальности ===&lt;br /&gt;
&lt;br /&gt;
Оценка выполняется на основе характеристики daps, которая оценивает число выполненных обращений (чтений и записей) в память в секунду. Данная характеристика является аналогом оценки flops применительно к работе с памятью и является в большей степени оценкой производительности взаимодействия с памятью, чем оценкой локальности. Однако она служит хорошим источником информации, в том числе для сравнения с результатами по следующей характеристике cvg.&lt;br /&gt;
&lt;br /&gt;
На рисунке 6 приведены значения daps для реализаций распространенных алгоритмов, отсортированные по возрастанию (чем больше daps, тем в общем случае выше производительность). Можно увидеть, что производительность работы с памятью в данном случае достаточно неплоха – значение daps сравнимо, например, со значением для реализации метода Холецкого. Однако это значение заметно ниже самых производительных реализаций алгоритмов (например, теста Linpack), что в целом неудивительно в случае графовых алгоритмов, традиционно неэффективно работающих с памятью.&lt;br /&gt;
&lt;br /&gt;
[[file:boruvka_daps.png|thumb|center|700px|Рисунок 6. Сравнение значений оценки daps]]&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:Boruvka&amp;#039;s, locality]]&lt;/div&gt;</summary>
		<author><name>ASA</name></author>
	</entry>
</feed>