<?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=K-means_clustering%2C_scalability4</id>
	<title>K-means clustering, scalability4 - История изменений</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=K-means_clustering%2C_scalability4"/>
	<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=K-means_clustering,_scalability4&amp;action=history"/>
	<updated>2026-10-22T18:05:00Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=K-means_clustering,_scalability4&amp;diff=29180&amp;oldid=prev</id>
		<title>ASA: Новая страница: «{{level-i}}  Основные авторы описания: [https://algowiki-project.org/ru/Участник:Илья_Егоров&lt;b&gt;И.Егоров&lt;/b&gt;], [http...»</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=K-means_clustering,_scalability4&amp;diff=29180&amp;oldid=prev"/>
		<updated>2022-07-19T13:27:41Z</updated>

		<summary type="html">&lt;p&gt;Новая страница: «{{level-i}}  Основные авторы описания: [https://algowiki-project.org/ru/Участник:Илья_Егоров&amp;lt;b&amp;gt;И.Егоров&amp;lt;/b&amp;gt;], [http...»&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;
Основные авторы описания: [https://algowiki-project.org/ru/Участник:Илья_Егоров&amp;lt;b&amp;gt;И.Егоров&amp;lt;/b&amp;gt;], [https://algowiki-project.org/ru/Участник:Богомазов_Евгений&amp;lt;b&amp;gt;Е.Богомазов&amp;lt;/b&amp;gt;].&lt;br /&gt;
&lt;br /&gt;
= Ссылки =&lt;br /&gt;
&lt;br /&gt;
Параллельная реализация была написана самостоятельно на языке C, [http://git.algowiki-project.org/iaegorov/Egorov-Bogomazov-k-means/tree/master ссылка на реализацию]. Так как на каждой итерации число действий на единицу данных не велико и данные должны быть собраны вместе при перерасчете центроидов, было решено для ускорения вычислений воспользоваться только OpenMP без использовании MPI.&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;
Исследование масштабируемости данной параллельной реализации алгоритма k-средних также проводилось на суперкомпьютере &amp;quot;Ломоносов&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Код собирался под gcc с опцией -fopenmp. Код считался на одном процессоре, технология hyperthreading не использовалась.&lt;br /&gt;
&lt;br /&gt;
Набор и границы значений изменяемых [[Глоссарий#Параметры запуска|параметров запуска]] реализации алгоритма: &lt;br /&gt;
&lt;br /&gt;
* число процессоров [1 : 16] с увеличением в 2 раза;&lt;br /&gt;
* размер данных [100000 : 1600000] с увеличением в 2 раза.&lt;br /&gt;
&lt;br /&gt;
В результате проведённых экспериментов были получены следующие данные:&lt;br /&gt;
&lt;br /&gt;
* Максимальная эффективность в точке достигается при переходе от 1 потока на 4 при минимальном размере данных, она равна &amp;lt;math&amp;gt;87,5%&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Усредненная максимальная эффективность достигается при переходе с одного потока на два. Среднее время вычислений на всех рассмотренных потока снижается с 16,33 до 11.87 секунд, поэтому формально эффективность &amp;lt;math&amp;gt;= 16.33 / 11.87 / 2 \approx 68,4\%&amp;lt;/math&amp;gt;&lt;br /&gt;
* Минимальная эффективность в точке достигается при переходе от 1 потока на 16 при размере данных 800000, она равна &amp;lt;math&amp;gt;11,1\%&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Усредненная минимальная эффективность наблюдается при переходе с одного на максимальное рассматриваемое в эксперименте число потоков, равное 16. Время вычисления изменяется с 16,33 до 7,6 секунд, поэтому формально эффективность &amp;lt;math&amp;gt; = 16.33 / 7.6 / 16 \approx 14,9\%&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ниже приведены графики зависимости вычислительного времени алгоритма и его эффективности от изменяемых параметров запуска — размера данных и числа процессоров:&lt;br /&gt;
&lt;br /&gt;
[[file:Egorov_Bogomazov_Time.jpg|thumb|center|700px|Рис. 1. Параллельная реализация алгоритма k-средних. Изменение вычислительного времени алгоритма в зависимости от числа процессоров и размера исходных данных.]]&lt;br /&gt;
&lt;br /&gt;
Здесь видно, что время выполнения операций алгоритма плавно убывает по каждому из параметров, причем скорость убывания по параметру числа процессоров выше, чем в зависимости от размерности задачи.&lt;br /&gt;
&lt;br /&gt;
[[file:Egorov_Bogomazov_Efficiency.jpg|thumb|center|700px|Рис. 2. Параллельная реализация алгоритма k-средних. Изменение эффективности алгоритма в зависимости от числа процессоров и размера исходных данных.]]&lt;br /&gt;
&lt;br /&gt;
Здесь построена эффективность перехода от последовательной реализации к параллельной. Рассчитывается она по формуле &amp;#039;&amp;#039;Время вычисления на 1 потоке / Время вычисления на &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; потоках / &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;&amp;#039;&amp;#039;, где &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; — это число потоков. При вычислении на 1 процессоре она равна 100 \% в силу используемой формулы, что и отражено на графике.&lt;br /&gt;
&lt;br /&gt;
Проведем оценки масштабируемости:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;По числу процессов&amp;#039;&amp;#039;&amp;#039; — при увеличении числа процессов эффективность уменьшается на всей области рассматриваемых значений, причем темп убывания замедляется с ростом числа процессов.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;По размеру задачи&amp;#039;&amp;#039;&amp;#039; — при увеличении размера задачи эффективность вычислений вначале кратковременно возрастает, но затем начинает относительно равномерно убывать на всей рассматриваемой области.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;По размеру задачи&amp;#039;&amp;#039;&amp;#039; — при увеличении размера задачи эффективность вычислений в общем случае постепенно убывает. На малых данных она выходит на пик мощности, являющийся максимумом эффективности в исследуемых условиях, но затем возвращается к процессу убывания.&lt;br /&gt;
&lt;br /&gt;
= Динамические характеристики и эффективность реализации алгоритма =&lt;br /&gt;
= Результаты прогонов =&lt;br /&gt;
&lt;br /&gt;
[[Категория:Статьи в работе]]&lt;br /&gt;
&lt;br /&gt;
[[En:K-means clustering, scalability4]]&lt;/div&gt;</summary>
		<author><name>ASA</name></author>
	</entry>
</feed>