Difference between revisions of "Forward substitution"

From Algowiki
Jump to navigation Jump to search
[unchecked revision][unchecked 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]] ([[#Описание локальности данных и вычислений|Section 2.2]]), [[:ru:Участник:Teplov|A.M. Teplov]] (Section [[#Масштабируемость алгоритма и его реализации|2.4]])
  
== Описание свойств и структуры алгоритма ==
+
== Description of the properties and structure of the algorithm ==
  
=== Общее описание алгоритма ===
+
=== General description ===
  
'''Прямая подстановка''' - решение СЛАУ <math>Lx = y</math> с левой треугольной матрицей <math>L</math>. Матрица <math>L</math> - одна из составляющих матрицы <math>A</math> и получается либо из <math>LU</math>-разложения последней каким-либо из многочисленных способов (например, простое разложение Гаусса, разложение Гаусса с выбором ведущего элемента, компактная схема Гаусса), либо из других разложений. В силу треугольности <math>L</math> решение СЛАУ является одной из модификаций общего метода подстановки и записывается простыми формулами.
+
'''Forward substitution''' is the process of solving a system of linear algebraic equations (SLAE) <math>Lx = y</math> with a lower triangular coefficient matrix <math>L</math>. The matrix <math>L</math> is a factor of the matrix <math>A</math> and results from either the <math>LU</math>-decomposition of the latter obtained by any of numerous ways (such as simple Gaussian elimination or Gaussian elimination with pivoting or compact schemes of Gaussian elimination) or other types of decomposition. The triangular form of <math>L</math> ensures that the process of solving a SLAE is a modification of the general substitution method and this process can be described by simple formulas.
  
В [1] метод решения СЛАУ с ''левой треугольной матрицей'' назван методом '''обратной подстановки'''. Там же отмечено, что в литературе иногда под ''обратной подстановкой'' имеют в виду, как и здесь, только решения СЛАУ с ''правой треугольной матрицей'', а решение ''левых'' треугольных систем называют прямой подстановкой. Такой же системы названий будем придерживаться и мы, во избежание одноимённого названия разных алгоритмов. Кроме того, [[Обратная подстановка (вещественный вариант)|обратная подстановка]], представленная в этой энциклопедии алгоритмов, одновременно является частью '''метода Гаусса для решения СЛАУ''', а именно - его '''обратным ходом''', чего нельзя сказать про представленную здесь прямую подстановку.
+
In [1], the process of solving a SLAE  with a lower triangular coefficient matrix was named the '''back substitution'''. It was also noted in [1] that, in the literature, ''back substitution'' is usually regarded as solving a SLAE with a ''right triangular matrix'', whereas the solution of ''left'' triangular systems is called the forward substitution. We adopt this nomenclature in order to avoid using identical names for different algorithms.  Furthermore, unlike the forward substitution treated here, the [[Back substitution|back substitution]], as presented in this algorithmic encyclopedia, is at the same time one of the stages in '''Gaussian elimination for solving SLAEs''', namely, the final stage of this method.  
  
Общая структура прямой подстановки с неособенной левой треугольной матрицей, тем не менее, практически полностью совпадает со структурой [[Обратная подстановка (вещественный вариант)|обратной подстановки]]. Поэтому здесь мы рассмотрим случай, когда матрица <math>L</math>, как полученная из разложения типа Гаусса, имеет единичные диагональные элементы.
+
Nevertheless, the structure of the forward substitution for a nonsingular left triangular matrix is virtually identical to the structure of the back substitution. Here, we consider the case where
 +
<math>L</math> is a matrix obtained from a Gauss-like decomposition and, hence, <math>L</math> has unit diagonal entries.  
  
=== Математическое описание ===
+
=== Mathematical description ===
  
Исходные данные: левая треугольная матрица <math>L</math> (элементы <math>l_{ij}</math>), вектор правой части <math>b</math> (элементы <math>b_{i}</math>).
+
Input data: left triangular matrix <math>L</math> (with entries <math>l_{ij}</math>), right-hand side vector <math>b</math> (with components <math>b_{i}</math>).
  
Вычисляемые данные: вектор решения <math>y</math> (элементы <math>y_{i}</math>).
+
Output data: solution vector <math>y</math> (with components <math>y_{i}</math>).
  
Формулы метода:
+
Formulas of the method:
 
:<math>
 
:<math>
 
\begin{align}
 
\begin{align}
Line 25: Line 26:
 
</math>
 
</math>
  
Существует также блочная версия метода, однако в данном описании разобран только точечный метод.
+
There exists also a block version of the method; however, this description treats only the pointwise version.  
  
=== Вычислительное ядро алгоритма ===
+
=== Computational kernel of the algorithm ===
  
Вычислительное ядро прямой подстановки можно составить из множественных (всего их <math>n-1</math>) вычислений скалярных произведений строк матрицы <math>L</math> на уже вычисленную часть вектора <math>y</math>:
+
The computational kernel of the forward substitution could be compiled of repeated dot products of the rows of <math>L</math> and the already determined portions of the vector <math>y</math> (there are on the whole <math>n-1</math> products) :
  
 
:<math> \sum_{j = 1}^{i-1} l_{ij} y_{j} </math>  
 
:<math> \sum_{j = 1}^{i-1} l_{ij} y_{j} </math>  
  
в режиме накопления или без него, в зависимости от требований задачи, с их последующим вычитанием из компоненты вектора <math>b</math> и деления на диагональный элемент матрицы <math>L</math>. В отечественных реализациях, даже в последовательных, упомянутый способ представления не используется. Дело в том, что даже в этих реализациях метода вычисление сумм типа
+
Depending on the problem requirements, these products are calculated with or without using the accumulation mode. Then they are subtracted from the corresponding components of the vector <math>b</math>, and the results are divided by the corresponding diagonal entries of <math>L</math>. This scheme is, however, not used in domestic implementations, even in serial ones. In these implementations, sums of the type
+
 
 
:<math> b_{i} - \sum_{j = 1}^{i-1} l_{ij} y_{j} </math>
 
:<math> b_{i} - \sum_{j = 1}^{i-1} l_{ij} y_{j} </math>
  
в которых и встречаются скалярные произведения, ведутся не в порядке «вычислили скалярное произведение, а потом вычли его из элемента», а путём вычитания из элемента покомпонентных произведений, являющихся частями скалярных произведений. Поэтому следует считать вычислительным ядром метода прямой подстановки не вычисления скалярных произведений, а вычисления выражений
+
(and dot products are exactly such sums) are not calculated according to the rule "first, find the dot product and then subtract it from the given element". Instead, the componentwise products, which are summands of the dot product, are one by one subtracted from this element. Consequently, the calculation of the expressions
  
 
:<math> b_{i} - \sum_{j = 1}^{i-1} l_{ij} y_{j} </math>
 
:<math> b_{i} - \sum_{j = 1}^{i-1} l_{ij} y_{j} </math>
  
в режиме накопления или без него, в зависимости от требований задачи.
+
rather than dot products should be regarded as the computational kernel of the forward substitution.  Depending on the problem requirements, these expressions are calculated with or without using the accumulation mode.  
  
=== Макроструктура алгоритма ===
+
=== Macrostructure of the algorithm ===
  
Как уже записано в [[#Вычислительное ядро алгоритма|описании ядра алгоритма]], основную часть метода прямой подстановки составляют множественные (всего <math>n-1</math>) вычисления сумм
+
As already noted in [[#Computational kernel of the algorithm|the description of the computational kernel]], the basic part of the forward substitution is compiled of repeated calculations of the sums
  
 
:<math> b_{i} - \sum_{j = 1}^{i-1} l_{ij} y_{j} </math>
 
:<math> b_{i} - \sum_{j = 1}^{i-1} l_{ij} y_{j} </math>
  
в режиме накопления или без него.
+
(there are on the whole <math>n-1</math> sums). These calculations are performed with or without using the accumulation mode.  
  
=== Описание схемы реализации последовательного алгоритма ===
+
=== Implementation scheme of the serial algorithm ===
  
Чтобы понять последовательность исполнения, перепишем формулы метода так:
+
To make the order of calculations clearer, rewrite the formulas of the method as follows.
  
 
1. <math>y_{1} = b_{1}</math>
 
1. <math>y_{1} = b_{1}</math>
  
Далее для всех <math>i</math> от <math>2</math> до <math>n</math> по возрастанию выполняются
+
Then, for <math>i</math> increasing from <math>2</math> to <math>n</math>, do
  
 
2. <math>y_{i} = b_{i} - \sum_{j = 1}^{i-1} l_{ij} y_{j}</math>
 
2. <math>y_{i} = b_{i} - \sum_{j = 1}^{i-1} l_{ij} y_{j}</math>
  
Особо отметим, что вычисления сумм вида <math>b_{i} - \sum_{j = 1}^{i-1} l_{ij} y_{j}</math> производят в режиме накопления вычитанием из <math>b_{i}</math> произведений <math>l_{ij} y_{j}</math> для <math>j</math> от <math>1</math> до <math>i-1</math>, '''c возрастанием''' <math>j</math>. '''''Другие порядки выполнения суммирования приводят к резкому ухудшению параллельных свойств алгоритма'''''.
+
We emphasize that sums of the form <math>b_{i} - \sum_{j = 1}^{i-1} l_{ij} y_{j}</math> are calculated in the accumulation mode by subtracting from <math>b_{i}</math> the products <math>l_{ij} y_{j}</math>for <math>j</math> increasing from <math>1</math> to <math>i-1</math>. '''''Any other order of summation makes the parallel properties of the algorithm much worse'''''.
 +
 
 +
=== Serial complexity of the algorithm ===
  
=== Последовательная сложность алгоритма ===
+
The forward substitution of order n in its serial (that is, the fastest) version requires
  
Для прямой подстановки порядка n  в последовательном (наиболее быстром) варианте требуется:
+
* <math>\frac{n^2-n}{2}</math> multiplications and the same number of additions (subtractions).
 
* по <math>\frac{n^2-n}{2}</math> умножений и сложений (вычитаний).
 
 
   
 
   
При этом использование режима накопления требует совершения умножений и вычитаний в режиме двойной точности (или использования функции вроде DPROD в Фортране), что ещё больше увеличивает затраты во времени, требуемом для выполнения прямой подстановки.
+
The use of accumulation requires that multiplications and subtractions be done in the double precision mode (or such procedures as the Fortran function DPROD be used). This increases the computation time for performing the forward substitution.  
  
При классификации по последовательной сложности, таким образом, метод обратной подстановки относится к алгоритмам ''с квадратической сложностью''.
+
In terms of serial complexity, the forward substitution is qualified as a quadratic complexity algorithm.  
  
=== Информационный граф ===
+
=== Information graph ===
  
Опишем [[глоссарий#Граф алгоритма|граф алгоритма]] как аналитически, так и в виде рисунка.  
+
We describe [[Glossary#Algorithm graph|the graph of the algorithm]] both analytically and graphically.  
  
[[Файл:DirectL.png|450px|thumb|left|Прямая подстановка]]
+
[[Файл:DirectL.png|450px|thumb|left|Forward substitution]]
  
Граф алгоритма прямой подстановки состоит из одной группы вершин, расположенной в целочисленных узлах двумерной области, соответствующая ей операция  <math>a-bc</math>.  
+
The graph of forward substitution consists of a single group of vertices placed at integer nodes of a two-dimensional domain. The corresponding operation is <math>a-bc</math>.  
  
Естественно введённые координаты области таковы:  
+
The natural coordinates of this domain are as follows:  
* <math>i</math> — меняется в диапазоне от <math>2</math> до <math>n</math>, принимая все целочисленные значения;
+
* <math>i</math> changes from <math>2</math> to <math>n</math>, taking all the integer values in this range;
* <math>j</math> — меняется в диапазоне от <math>1</math> до <math>i-1</math>, принимая все целочисленные значения.
+
* <math>j</math> changes from <math>1</math> to <math>i-1</math>, taking all the integer values in this range.
  
Аргументы операции следующие:
+
The arguments of the operation are as follows:
*<math>a</math>:
+
*<math>a</math> is:
** при <math>j = 1</math> элемент входных данных <math>b_{i}</math>;  
+
** the element <math>b_{i}</math> of the input data if <math>j = 1</math>;  
** при <math>j > 1</math> — результат срабатывания операции, соответствующей вершине с координатами <math>i, j-1</math>;
+
** the result of performing the operation corresponding to the vertex with coordinates <math>i, j-1</math> if <math>j > 1</math>;
*<math>b</math> — элемент ''входных данных'', а именно <math>l_{ij}</math>;
+
*<math>b</math> is the element <math>l_{ij}</math> of the input data;
*<math>c</math>:
+
*<math>c</math> is:
** при <math>j = 1</math> элемент входных данных <math>b_{1}</math>;  
+
** the element <math>b_{1}</math> of the input data if <math>j = 1</math>;  
** при <math>j > 1</math> — результат срабатывания операции, соответствующей вершине с координатой <math>j, j-1</math>;
+
** the result of performing the operation corresponding to the vertex with coordinates <math>j, j-1</math> if <math>j > 1</math>.
  
Результат срабатывания операции является:
+
The result of performing the operation is:
** при <math>j < i-1</math> - ''промежуточным данным'' алгоритма;
+
* an intermediate data item if <math>j < i-1</math> ;
** при <math>j = i-1</math> - выходным данным.
+
* an output data item if <math>j = i-1</math> .
  
Описанный граф можно посмотреть на рисунке, выполненном для случая <math>n = 5</math>. Здесь вершины обозначены зелёным цветом. Подача входных данных из вектора <math>b</math>, идущая в вершины левого столбца, и матрицы <math>L</math>, идущая во все вершины, на рисунке не представлена.
+
The graph described can be seen in the figure corresponding to the case
 +
<math>n = 5</math>. The vertices are depicted in green. The supplies of the input data from the vector <math>b</math> to the vertices of the left column and from the matrix <math>L</math> to all the vertices are not shown in the figure.
  
=== Описание ресурса параллелизма алгоритма ===
+
=== Parallelism resource of the algorithm ===
  
Для прямой подстановки порядка n в параллельном варианте требуется последовательно выполнить следующие ярусы:
+
The parallel version of the forward substitution of order n requires that the following layers be successively performed:  
  
* по <math>n - 1</math> ярусов умножений и сложений/вычитаний (в каждом из ярусов — линейное количество операций, от <math>1</math> до <math>n-1</math>.
+
* <math>n - 1</math> layers involving multiplications and additions / subtractions. (The number of operations changes linearly from <math>1</math> to <math>n-1</math>.)
 
   
 
   
При этом использование режима накопления требует совершения умножений и вычитаний в режиме двойной точности, а в параллельном варианте это означает, что практически все промежуточные вычисления для выполнения алгоритма в режиме накопления должны быть двойной точности. В отличие от последовательного варианта это означает некоторое увеличение требуемой памяти.
+
The use of accumulation requires that multiplications and subtractions be done in the double precision mode. For the parallel version, this implies that virtually all the intermediate calculations in the algorithm must be performed in double precision if the accumulation option is used. Unlike the situation with the serial version, this results in a certain increase in the required memory size.  
  
При классификации по высоте ЯПФ, таким образом, метод прямой подстановки относится к алгоритмам ''с линейной сложностью''. При классификации по ширине ЯПФ его сложность также будет ''линейной''.
+
In terms of the parallel form height, the forward substitution is qualified as a linear complexity algorithm. Its complexity is also linear in terms of the parallel form width.  
  
=== Описание входных и выходных данных ===
+
=== Description of the input and output data ===
  
'''Входные данные''': левая треугольная матрица <math>L</math> (элементы <math>l_{ij}</math>), вектор правой части <math>b</math> (элементы <math>b_{i}</math>).
+
'''Input data''': left triangular matrix <math>L</math> (with entries <math>l_{ij}</math>), right-hand side vector <math>b</math> (with components <math>b_{i}</math>).  
  
'''Объём входных данных''': :<math>\frac{n (n + 1)}{2}</math> (в силу треугольности и единичности диагональных элементов достаточно хранить только поддиагональные элементы матрицы <math>L</math>).  
+
'''Size of the input data ''': <math>\frac{n (n + 1)}{2}</math> (since <math>L</math> is triangular and has unit diagonal entries, it suffices that only its subdiagonal entries be stored).  
  
'''Выходные данные''': вектор решения <math>y</math> (элементы <math>y_{i}</math>).
+
'''Output data ''': solution vector <math>y</math> (with components <math>y_{i}</math>).
  
'''Объём выходных данных''': :<math>n~.</math>
+
''''''Size of the output data''': <math>n~.</math>
  
=== Свойства алгоритма ===
+
=== Properties of the algorithm ===
  
Соотношение последовательной и параллельной сложности в случае неограниченных ресурсов, как хорошо видно, является ''линейным'' (отношение квадратической к линейной).  
+
It is clear that, in the case of unlimited resources, the ratio of the serial to parallel complexity is ''linear'' (since this is the ratio of the quadratic to linear complexity).  
  
При этом вычислительная мощность алгоритма прямой подстановки, как отношение числа операций к суммарному объему входных и выходных данных – всего лишь ''константа''.
+
The computational power of the forward substitution, understood as the ratio of the number of operations to the total size of the input and output data, is only a ''constant''.
  
При этом алгоритм прямой подстановки полностью детерминирован. Использование другого порядка выполнения ассоциативных операций в данной версии нами не рассматривается, поскольку в корне меняет структуру алгоритма и делает параллельную сложность квадратической.
+
In this version, the algorithm of forward substitution is completely determined. We do not consider any other order of performing operations because, otherwise, the structure of the algorithm would radically change and the parallel complexity would be quadratic.  
  
 
[[Ru:Прямая подстановка (вещественный вариант)]]
 
[[Ru:Прямая подстановка (вещественный вариант)]]
  
 
[[Category:Started articles]]
 
[[Category:Started articles]]

Revision as of 16:33, 10 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

Forward substitution is the process of solving a system of linear algebraic equations (SLAE) [math]Lx = y[/math] with a lower triangular coefficient matrix [math]L[/math]. The matrix [math]L[/math] is a factor of the matrix [math]A[/math] and results from either the [math]LU[/math]-decomposition of the latter obtained by any of numerous ways (such as simple Gaussian elimination or Gaussian elimination with pivoting or compact schemes of Gaussian elimination) or other types of decomposition. The triangular form of [math]L[/math] ensures that the process of solving a SLAE is a modification of the general substitution method and this process can be described by simple formulas.

In [1], the process of solving a SLAE with a lower triangular coefficient matrix was named the back substitution. It was also noted in [1] that, in the literature, back substitution is usually regarded as solving a SLAE with a right triangular matrix, whereas the solution of left triangular systems is called the forward substitution. We adopt this nomenclature in order to avoid using identical names for different algorithms. Furthermore, unlike the forward substitution treated here, the back substitution, as presented in this algorithmic encyclopedia, is at the same time one of the stages in Gaussian elimination for solving SLAEs, namely, the final stage of this method.

Nevertheless, the structure of the forward substitution for a nonsingular left triangular matrix is virtually identical to the structure of the back substitution. Here, we consider the case where [math]L[/math] is a matrix obtained from a Gauss-like decomposition and, hence, [math]L[/math] has unit diagonal entries.

1.2 Mathematical description

Input data: left triangular matrix [math]L[/math] (with entries [math]l_{ij}[/math]), right-hand side vector [math]b[/math] (with components [math]b_{i}[/math]).

Output data: solution vector [math]y[/math] (with components [math]y_{i}[/math]).

Formulas of the method:

[math] \begin{align} y_{1} & = b_{1} \\ y_{i} & = b_{i} - \sum_{j = 1}^{i-1} l_{ij} y_{j}, \quad i \in [2, n]. \end{align} [/math]

There exists also a block version of the method; however, this description treats only the pointwise version.

1.3 Computational kernel of the algorithm

The computational kernel of the forward substitution could be compiled of repeated dot products of the rows of [math]L[/math] and the already determined portions of the vector [math]y[/math] (there are on the whole [math]n-1[/math] products) :

[math] \sum_{j = 1}^{i-1} l_{ij} y_{j} [/math]

Depending on the problem requirements, these products are calculated with or without using the accumulation mode. Then they are subtracted from the corresponding components of the vector [math]b[/math], and the results are divided by the corresponding diagonal entries of [math]L[/math]. This scheme is, however, not used in domestic implementations, even in serial ones. In these implementations, sums of the type

[math] b_{i} - \sum_{j = 1}^{i-1} l_{ij} y_{j} [/math]

(and dot products are exactly such sums) are not calculated according to the rule "first, find the dot product and then subtract it from the given element". Instead, the componentwise products, which are summands of the dot product, are one by one subtracted from this element. Consequently, the calculation of the expressions

[math] b_{i} - \sum_{j = 1}^{i-1} l_{ij} y_{j} [/math]

rather than dot products should be regarded as the computational kernel of the forward substitution. Depending on the problem requirements, these expressions are calculated with or without using the accumulation mode.

1.4 Macrostructure of the algorithm

As already noted in the description of the computational kernel, the basic part of the forward substitution is compiled of repeated calculations of the sums

[math] b_{i} - \sum_{j = 1}^{i-1} l_{ij} y_{j} [/math]

(there are on the whole [math]n-1[/math] sums). These calculations are performed with or without using the accumulation mode.

1.5 Implementation scheme of the serial algorithm

To make the order of calculations clearer, rewrite the formulas of the method as follows.

1. [math]y_{1} = b_{1}[/math]

Then, for [math]i[/math] increasing from [math]2[/math] to [math]n[/math], do

2. [math]y_{i} = b_{i} - \sum_{j = 1}^{i-1} l_{ij} y_{j}[/math]

We emphasize that sums of the form [math]b_{i} - \sum_{j = 1}^{i-1} l_{ij} y_{j}[/math] are calculated in the accumulation mode by subtracting from [math]b_{i}[/math] the products [math]l_{ij} y_{j}[/math]for [math]j[/math] increasing from [math]1[/math] to [math]i-1[/math]. Any other order of summation makes the parallel properties of the algorithm much worse.

1.6 Serial complexity of the algorithm

The forward substitution of order n in its serial (that is, the fastest) version requires

  • [math]\frac{n^2-n}{2}[/math] multiplications and the same number of additions (subtractions).

The use of accumulation requires that multiplications and subtractions be done in the double precision mode (or such procedures as the Fortran function DPROD be used). This increases the computation time for performing the forward substitution.

In terms of serial complexity, the forward substitution is qualified as a quadratic complexity algorithm.

1.7 Information graph

We describe the graph of the algorithm both analytically and graphically.

450px|thumb|left|Forward substitution

The graph of forward substitution consists of a single group of vertices placed at integer nodes of a two-dimensional domain. The corresponding operation is [math]a-bc[/math].

The natural coordinates of this domain are as follows:

  • [math]i[/math] changes from [math]2[/math] to [math]n[/math], taking all the integer values in this range;
  • [math]j[/math] changes from [math]1[/math] to [math]i-1[/math], taking all the integer values in this range.

The arguments of the operation are as follows:

  • [math]a[/math] is:
    • the element [math]b_{i}[/math] of the input data if [math]j = 1[/math];
    • the result of performing the operation corresponding to the vertex with coordinates [math]i, j-1[/math] if [math]j \gt 1[/math];
  • [math]b[/math] is the element [math]l_{ij}[/math] of the input data;
  • [math]c[/math] is:
    • the element [math]b_{1}[/math] of the input data if [math]j = 1[/math];
    • the result of performing the operation corresponding to the vertex with coordinates [math]j, j-1[/math] if [math]j \gt 1[/math].

The result of performing the operation is:

  • an intermediate data item if [math]j \lt i-1[/math] ;
  • an output data item if [math]j = i-1[/math] .

The graph described can be seen in the figure corresponding to the case [math]n = 5[/math]. The vertices are depicted in green. The supplies of the input data from the vector [math]b[/math] to the vertices of the left column and from the matrix [math]L[/math] to all the vertices are not shown in the figure.

1.8 Parallelism resource of the algorithm

The parallel version of the forward substitution of order n requires that the following layers be successively performed:

  • [math]n - 1[/math] layers involving multiplications and additions / subtractions. (The number of operations changes linearly from [math]1[/math] to [math]n-1[/math].)

The use of accumulation requires that multiplications and subtractions be done in the double precision mode. For the parallel version, this implies that virtually all the intermediate calculations in the algorithm must be performed in double precision if the accumulation option is used. Unlike the situation with the serial version, this results in a certain increase in the required memory size.

In terms of the parallel form height, the forward substitution is qualified as a linear complexity algorithm. Its complexity is also linear in terms of the parallel form width.

1.9 Description of the input and output data

Input data: left triangular matrix [math]L[/math] (with entries [math]l_{ij}[/math]), right-hand side vector [math]b[/math] (with components [math]b_{i}[/math]).

Size of the input data : [math]\frac{n (n + 1)}{2}[/math] (since [math]L[/math] is triangular and has unit diagonal entries, it suffices that only its subdiagonal entries be stored).

Output data : solution vector [math]y[/math] (with components [math]y_{i}[/math]).

'Size of the output data: [math]n~.[/math]

1.10 Properties of the algorithm

It is clear that, in the case of unlimited resources, the ratio of the serial to parallel complexity is linear (since this is the ratio of the quadratic to linear complexity).

The computational power of the forward substitution, understood as the ratio of the number of operations to the total size of the input and output data, is only a constant.

In this version, the algorithm of forward substitution is completely determined. We do not consider any other order of performing operations because, otherwise, the structure of the algorithm would radically change and the parallel complexity would be quadratic.