Difference between revisions of "Pairwise summation of numbers"

From Algowiki
Jump to navigation Jump to search
[unchecked revision][quality revision]
(Created page with "Основные авторы описания: А.В.Фролов, Вад.В.Воеводин (#Описание л...")
 
Line 1: Line 1:
Основные авторы описания: [[Участник:Frolov|А.В.Фролов]], [[Участник:VadimVV|Вад.В.Воеводин]] ([[#Описание локальности данных и вычислений|раздел 2.2]]), [[Участник:Teplov|А.М.Теплов]] (раздел [[#Масштабируемость алгоритма и его реализации|2.4]])
+
Primary authors of this description: [[:ru:Участник:Frolov|A.V.Frolov]], [[:ru:Участник:VadimVV|Vad.V.Voevodin]] ([[#Locality of data and computations|Section 2.2]]), [[:ru:Участник:Teplov|A.M.Teplov]] ([[#Scalability of the algorithm and its implementations|Section 2.4]])
  
== Описание свойств и структуры алгоритма ==
+
== Description of the properties and structure of the algorithm ==
  
=== Общее описание алгоритма ===
+
=== General description ===
  
'''Метод сдваивания''' используется в качестве быстрого варианта вычисления длинных последовательностей ассоциативных операций (например, массового суммирования). Получил распространение благодаря как наименьшей из возможных высоте алгортима, так и из-за ряда своих вычислительных характеристик, а также (в среде нечисленных алгоритмов) из-за своей рекурсивности, то есть лёгкости записи.
+
The technique of '''pairwise execution''' is used to accelerate the calculation of long sequences of associative operations (for instance, mass summations). It is widely used because of its computational characteristics and the fact that the height of this algorithm is minimum possible. Its popularity among the non-numerical algorithms is related to its recursive nature, which simplifies its formulation.
  
=== Математическое описание ===
+
=== Mathematical description ===
  
Исходные данные: одномерный массив <math>n</math> чисел.
+
Input data: one-dimensional numeric array of size <math>n</math>.
  
Вычисляемые данные: сумма элементов массива.
+
Output data: sum of the array's elements.
  
Формулы метода: элементы на каждом этапе алгоритма разбиваются на пары. В каждой из пар находится сумма составляющих её элементов. На следующем этапе на пары разбиваются уже эти суммы (и те элементы, которые не вошли в уже вычисленные суммы), и т. д.
+
Formulas of the method: At each stage, the current array is first partitioned into pairs, and then the elements in each pair are summed. The resulting sums (and the elements not used at this stage) form an array that is partitioned into pairs at the next stage, etc.
  
=== Вычислительное ядро алгоритма ===
+
=== Computational kernel of the algorithm ===
  
Вычислительное ядро последовательно-параллельного метода суммирования можно составить как из элементарных бинарных (всего <math>n - 1</math>) вычислений сумм, так и (рекуррентно) из набора реализаций метода сдваивания меньших размерностей.
+
The computational kernel of the serial-parallel summation method can be compiled either of elementary pairwise additions (there are on the whole <math>n - 1</math> additions) or in a recursive manner, that is, as a set of implementations of the pairwise summation for shorter arrays.  
  
=== Макроструктура алгоритма ===
+
=== Macrostructure of the algorithm ===
  
Как уже записано в описании ядра алгоритма, основную часть метода составляют рекурсивные вызовы сумм массивов меньшей размерности.
+
As already noted in the description of the computational kernel, the basic part of the method is compiled of recursive calls of the summation procedure for shorter arrays.  
  
=== Описание схемы реализации последовательного алгоритма ===
+
=== Implementation scheme of the serial algorithm ===
  
В своём чистом виде суммирование сдваиванием редко используют при последовательной реализации, поскольку при этом усложняется общая схема алгоритма и резко растёт потребность в памяти, нужной для хранения промежуточных данных.
+
In its pure form, the pairwise summation is rarely used in a serial implementation because this complicates the general scheme of the algorithm and sharply increases the size of memory for storing intermediate data.  
  
=== Последовательная сложность алгоритма ===
+
=== Serial complexity of the algorithm ===
  
Для вычисления суммы массива, состоящего из <math>N</math> элементов, при любых разложениях <math>N</math> на пары суть алгоритма сводится к простому переставлению скобок в формуле суммирования, и количество операций неизменно и равно <math>N - 1</math>. Поэтому алгоритм должен быть отнесён к алгоритмам ''линейной сложности'' по количеству последовательных операций.
+
Various ways of summation of an array of size <math>n</math> differ from each other only by the arrangement of parentheses in the sum. The number of additions is the same for all arrangements, namely, <math>n - 1</math>. Thus, in terms of serial complexity, the method should be qualified as a ''linear'' complexity algorithm.  
  
=== Информационный граф ===
+
=== Information graph ===
  
Опишем граф алгоритма в виде рисунка. В данном случае выполнено суммирование 16 элементов массива.
+
The algorithm graph is shown in the figure in the case where an array of size 16 is summed. The vertices corresponding to the input data are depicted in blue, while those that correspond to output data are depicted in red.  
Вершины , соответствующие входным данным - даны синим цветом , выходным данным - красным цветом.
 
  
[[file:binary-tree-based summation graph.png|center|thumb|500px|Суммирование массива методом сдваивания]]
+
[[file:binary-tree-based summation graph.png|center|thumb|500px|Pairwise summation of an array]]
  
=== Описание ресурса параллелизма алгоритма ===
+
=== Parallelism resource of the algorithm ===
  
Для суммирования массива порядка <math>n</math> методом сдваивания в параллельном варианте требуется последовательно выполнить <math>\lceil \log_2 n \rceil</math> ярусов с убывающим (от <math>\frac{n}{2}</math> до <math>1</math>) количеством операций суммирования.
+
The parallel version of the pairwise summation for an array of size <math>n</math> requires that <math>\lceil \log_2 n \rceil</math> layers be successively performed. The number of additions per layer decreases from <math>\frac{n}{2}</math> to <math>1</math>). In terms of the parallel form height, the pairwise summation is qualified as a ''logarithmic complexity'' algorithm. Its complexity is ''linear'' in terms of the parallel form width.  
При классификации по высоте ЯПФ, таким образом, метод сдваивания относится к алгоритмам с ''логарифмической сложностью''. При классификации по ширине ЯПФ его сложность будет ''линейной''.
 
  
=== Описание входных и выходных данных ===
+
=== Description of the input and output data ===
  
Входные данные: массив <math>x</math> (элементы <math>x_i</math>).
+
Input data: array <math>x</math> (with elements <math>x_i</math>).
  
Дополнительные ограничения: отсутствуют.
+
Further restrictions: none.
  
Объём входных данных: <nowiki/><math>N</math>.  
+
Size of the input data: <nowiki/><math>N</math>.  
  
Выходные данные: сумма элементов массива.
+
Output data: sum of the array's elements.
  
Объём выходных данных: один скаляр.
+
Size of the output data: single scalar.
  
=== Свойства алгоритма ===
+
=== Properties of the algorithm ===
  
Соотношение последовательной и параллельной сложности в случае неограниченных ресурсов, как хорошо видно, является <math>\frac{n}{\log_2 n}</math> (отношение линейной к логарифмической). При этом вычислительная мощность алгоритма, как отношение числа операций к суммарному объему входных и выходных данных — всего-навсего ''1 (входных и выходных данных столько же, сколько операций)''. При этом алгоритм полностью детерминирован. Дуги информационного графа нелокальны, от яруса к ярусу наблюдается показательный рост их длины, при любом размещении вершин графа.  
+
It is clear that, in the case of unlimited resources, the ratio of the serial to parallel complexity has the order <math>\frac{n}{\log_2 n}</math> (the ratio of the linear to logarithmic complexity). The computational power of the algorithm, understood as the ratio of the number of operations to the total size of the input and output data, is only 1 (the size of the input and output data is almost equal to the number of operations). The algorithm is completely determined. The edges of the information graph are nonlocal. For any placing of graph vertices, the length of the edges grows exponentially from a layer to the next layer.  
  
 
[[Ru:Нахождение суммы элементов массива сдваиванием]]
 
[[Ru:Нахождение суммы элементов массива сдваиванием]]
  
[[Category:Started articles]]
+
[[Category:Articles in progress]]

Revision as of 10:59, 20 July 2015

Primary authors of this description: A.V.Frolov, Vad.V.Voevodin (Section 2.2), A.M.Teplov (Section 2.4)

1 Description of the properties and structure of the algorithm

1.1 General description

The technique of pairwise execution is used to accelerate the calculation of long sequences of associative operations (for instance, mass summations). It is widely used because of its computational characteristics and the fact that the height of this algorithm is minimum possible. Its popularity among the non-numerical algorithms is related to its recursive nature, which simplifies its formulation.

1.2 Mathematical description

Input data: one-dimensional numeric array of size [math]n[/math].

Output data: sum of the array's elements.

Formulas of the method: At each stage, the current array is first partitioned into pairs, and then the elements in each pair are summed. The resulting sums (and the elements not used at this stage) form an array that is partitioned into pairs at the next stage, etc.

1.3 Computational kernel of the algorithm

The computational kernel of the serial-parallel summation method can be compiled either of elementary pairwise additions (there are on the whole [math]n - 1[/math] additions) or in a recursive manner, that is, as a set of implementations of the pairwise summation for shorter arrays.

1.4 Macrostructure of the algorithm

As already noted in the description of the computational kernel, the basic part of the method is compiled of recursive calls of the summation procedure for shorter arrays.

1.5 Implementation scheme of the serial algorithm

In its pure form, the pairwise summation is rarely used in a serial implementation because this complicates the general scheme of the algorithm and sharply increases the size of memory for storing intermediate data.

1.6 Serial complexity of the algorithm

Various ways of summation of an array of size [math]n[/math] differ from each other only by the arrangement of parentheses in the sum. The number of additions is the same for all arrangements, namely, [math]n - 1[/math]. Thus, in terms of serial complexity, the method should be qualified as a linear complexity algorithm.

1.7 Information graph

The algorithm graph is shown in the figure in the case where an array of size 16 is summed. The vertices corresponding to the input data are depicted in blue, while those that correspond to output data are depicted in red.

Pairwise summation of an array

1.8 Parallelism resource of the algorithm

The parallel version of the pairwise summation for an array of size [math]n[/math] requires that [math]\lceil \log_2 n \rceil[/math] layers be successively performed. The number of additions per layer decreases from [math]\frac{n}{2}[/math] to [math]1[/math]). In terms of the parallel form height, the pairwise summation is qualified as a logarithmic complexity algorithm. Its complexity is linear in terms of the parallel form width.

1.9 Description of the input and output data

Input data: array [math]x[/math] (with elements [math]x_i[/math]).

Further restrictions: none.

Size of the input data: [math]N[/math].

Output data: sum of the array's elements.

Size of the output data: single scalar.

1.10 Properties of the algorithm

It is clear that, in the case of unlimited resources, the ratio of the serial to parallel complexity has the order [math]\frac{n}{\log_2 n}[/math] (the ratio of the linear to logarithmic complexity). The computational power of the algorithm, understood as the ratio of the number of operations to the total size of the input and output data, is only 1 (the size of the input and output data is almost equal to the number of operations). The algorithm is completely determined. The edges of the information graph are nonlocal. For any placing of graph vertices, the length of the edges grows exponentially from a layer to the next layer.