Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Алгоритмы решения систем линейных уравнений с блочно-ленточными матрицами. Монография

.pdf
Скачиваний:
0
Добавлен:
06.09.2026
Размер:
2 Мб
Скачать
Алгоритмы решения СЛАУ с блочно-ленточными матрицами. Глава 3 41
for (k = 0; k < ]log(n)[; k++) {
for (i = 2**k; i < n; i++) { // этот цикл выполняется параллельно
b[i] -= b[i]*b[i-2**k];
h[i] = h[i] - b[i]*h[i-2**k];
}}
Правильно ли выглядит эта программа? Неправильно. Поскольку во втором операторе тела гнезда циклов ис-
пользуются новые значения b
, а должны быть старые.
i
Поменяем операторы присваивания местами.
for (k = 0; k < ]log(n)[; k++) {
for (i = 2**k; i < n; i++) {
h[i] = h[i] - b[i]*h[i-2**k];
b[i] -= b[i]*b[i-2**k];
}}
Этим самым указанная проблема решена. Теперь последовательная про-
грамма соответствует описанному алгоритму?
Все равно не соответствует! При вычислении b[i] во внутреннем цикле
используются новые значения b[i – 2**k], которые вычислены этим же ци­клом на предыдущих итерациях, а должны быть старые значения, вычис­ленные до этого цикла на прежних итерациях внешнего цикла.
Итерации внутреннего цикла можно читать наоборот, «справа-налево»,
от большего значения к меньшему, тогда отмеченные проблемы решаются.
for (k = 0; k < ]log(n)[; k++) {
for (i = n-1; i > 2**k-1; i--) {
h[i] = h[i] - b[i]*h[i-2**k];
b[i] -= b[i]*b[i-2**k];
}}
Можно воспользоваться преобразованием «канонизация цикла», кото-
рое приводит программный цикл со счетчиком к стандартному виду, в ко­тором левая граница 0 (или 1) и шаг цикла (+1).
for (k = 0; k < ]log(n)[; k++) {
M = n – 2**k
for (j = 0; j < M; j++) {
i = n-1-j;
h[i] = h[i] - b[i]*h[i-2**k];
b[i] -= b[i]*b[i-2**k];
}}
42 Б. Я. Штейнберг, О. Б. Штейнберг
Параллельное выполнение цикла — это «одновременное» выполнение его итераций. Заменим внутренний цикл параллельным циклом forPAR, у которого все итерации выполняются «одновременно»:
for (k = 0; k < ]log(n)[; k++) { M = n - 2**k forPAR (j = 0; j < M; j++) {
// этот цикл выполняется параллельно
i = n-1-j; h[i] = h[i] – b[i]*h[i-2**k] b[i] -= b[i]*b[i-2**k] }}
Про цикл forPAR следует уточнить, соответствует он модели SIMD или модели MIMD.
Распараллеливание на SIMD Верно!
Распараллеливание на MIMD Неверно!
Данный алгоритм редукции можно корректно записать и следующей программой с двумерными массивами:
for (k = 0; k < ]log(n)[; k++) { for (i = 2**k; i < n; i++) { b[k+1,i] -= b[k,i]*b[k,i-2**k]; h[k+1,i] = h[k,i] – b[k,i]*h[k,i-2**k]; }}
Исчезли информационные зависимости относительно внутреннего цик­ла. Жертва памяти ради уменьшения количества одновременно выполняе­мых вычислительных операций.
Распараллеливание на SIMD Верно!
Распараллеливание на MIMD Верно!
Следует отметить, что такая жертва памяти на современных многоядер­ных процессорах не приведет к быстродействию, несмотря на уменьше­ние количества одновременно выполняемых вычислительных операций, поскольку наиболее длительная операция — обращение к памяти (чтение или запись).
При параллельном выполнении на MIMD архитектуре можно исполь­зовать барьерную синхронизацию и получить эквивалентное распаралле­ливание. Но необходимо заметить, что такая синхронизация может отнять существенное время по сравнению с вычислениями. Однако, если рассма­тривать алгоритм для блочной двухдиагональной матрицы, для которой
Алгоритмы решения СЛАУ с блочно-ленточными матрицами. Глава 3 43
. . .....
xa
xa
xa
xa
       
 
объем вычислительных операций больше, то такая синхронизация может оказаться несущественной.
3.3. Применения алгоритма параллельного решения системы уравнений с ленточной
двухдиагональной матрицей
Рассмотрим несколько задач, которые сводятся к решению СЛАУ с
двухдиагональной матрицей.
Пример 7. Описанный выше алгоритм можно применить для парал­лельного вычисления многочлена
f(x) = a0xn + a1x
Для этого достаточно решить систему, n-ый корень которой равен значению этого многочлена в точке x.
n-1
+ … + a
x +an.
n-1
1
1
1
1
Конец примера.
Пример 8. Для одновременного вычисления всех n сумм квадратных матриц
A
1
A1 + A
2
A1 + A2 + A
3
a
0
1
2
3
1
n
A1 + A2 + A3 +…+ A
достаточно параллельно решить блочную систему уравнений, кор­нями которой являются эти суммы:
n
.
44 Б. Я. Штейнберг, О. Б. Штейнберг
. . .....
       
 
10
10
10
. . . . . ..
       
 
1
11
11
11
11
Конец примера.
Пример 9. Для одновременного вычисления всех произведений ква­дратных матриц
A
1
A1*A
2
A1*A2*A
3
A
1
A
2
A
3
.
A
4
A
n
A1*A2*A3 *…* A
достаточно параллельно решить блочную систему уравнений, кор­нями которой являются эти произведения:
n
1
A
1
A
2
A
3
I
.
A
10
n
Конец примера.
Последние два примера рассматривались в [21].
Алгоритмы решения СЛАУ с блочно-ленточными матрицами. Глава 3 45
22
33 3
44 4
55 5
66 6
11 1
1
....... . .. .
....... . .. .
nn n
nn n
h
bh
cb h
cb h
cb h
cb h
cb h
cb h
−−
10
 

ii
cb
−−
 

3.4. СЛАУ с ленточными треугольными матрицами
Решение СЛАУ с ленточными треугольными матрицами сводится к ре­шению СЛАУ с блочными двухдиагональными матрицами. Будем рассма­тривать случай невырожденной матрицы системы. Не умаляя общности, можно считать, что на главной диагонали матрицы стоят единицы (иначе каждую строку матрицы разделили бы на элемент главной диагонали). Бу­дем также рассматривать случай нижнетреугольной матрицы. Для верхне­треугольной матрицы алгоритм выглядит аналогично.
1
1
1
1
1
1
1
1
Итак, пусть в нижнетреугольной матрице m-ая диагональ ненулевая, а все поддиагонали, начиная с (m + 1)-ой, — нулевые (в рассматриваемом примере m = 2). Тогда матрицу системы разобьем на блоки размера m*m. Получится блочная двухдиагональная матрица, причем очевидно, что по главной диагонали стоят обратимые блоки. В данном примере
.
B
=
i
21 21
0
c
i
2
A
=
i
b
Умножим каждую блочную строку слева на блок, обратный к диаго­нальному — получим также систему с блочной двухдиагональной матри­цей, причем по главной диагонали будут стоять единичные блоки.
,
1
i
2
46 Б. Я. Штейнберг, О. Б. Штейнберг
33 3
44 4
55 5
46 6
11 1
. . . . .. . . .. .
. . . . .. . . .. .
nn n
nn n
yx t
zy t
yx t
zy t
yx t
zy t
−−
             
 
1
1
t
1
t
2
1
1
1
1
.
1
1
И так далее по алгоритму решения СЛАУ с блочной двухдиагональной
матрицей.
Пример 10. Рассмотрим задачу вычисления элементов последова­тельности Фибоначчи: 1, 1, 2, 3, 5, 8, 13, 21, 34, … Последователь­ность чисел Фибоначчи задается рекуррентной формулой
X[i] = X[i-1]+X[i-2], i = 3,4,...,N ; X[1] = 1, X[2] = 1.
Подставляя вместо i последовательно значения 3, 4, ... , получим систему уравнений относительно неизвестных X [ i ]:
X[1] = 1 X[2] = 1 X[3] = X[2] + X[1] X[4] = X[3] + X[2]
... X(N) = X(N-1)+X(N-2).
Перенесем все X [ i ] из правой части в левую и запишем матрицу си- стемы. Заметим, что эта матрица треугольная и ленточная. Решим эту систему для случая N = 8.
Алгоритмы решения СЛАУ с блочно-ленточными матрицами. Глава 3 47
100000001
010000001
111000000
0 11100000
00 1110000
000 111000
0000 11100
00000 1110
          
 
100000001
010000001
111000000
1 2 0 1 0 0 000
0 0 1 1 1 0 000
0 0 1 2 0 1 000
0000 11100
0000 12010
          
 
1 0 0 0 00001
0 1 0 0 00001
0 0 1 0 00002
0 0 0 1 00003
2 3 0 0 10000
3 5 0 0 01000
0 0 2 300100
0 0 3 500010
          
 
10000000 1
01000000 1
00100000 2
00010000 3
00001000 5
00000100 8
0000001013
0000000121
          
 
11 1
222 2
333 3
444 4
.......
nn n
AC H
B AC H
B AC H
B AC H
BAH
       
 
−−
−−
−−
−−
−−
−−
−−
−−
−−
~ ~
−−
−−
~
−−
−−
−−
Конец примера.
3.5. СЛАУ с блочной трехдиагональной не треугольной матрицей
−−
−−
.
Ненулевые блоки матрицы системы стоят на главной диагонали, первой
поддиагонали и первой наддиагонали.
(5)
48 Б. Я. Штейнберг, О. Б. Штейнберг
kk
iii
C AC
1kk
iii
B AB
=
kk
ii i
H AH
11
2
k kk
i
C CC
−− +
11
2
k kk
i
B BB
−−
11
11 11
22
kk
k kk kk
ii
−−
−− −−
−+
11
111 11
22
kk
kkkk kk
ii
−−
−−− −−
−+
Алгоритм решения такой системы состоит из ]log2 N[ шагов. После каждого шага алгоритма матрица остается трехдиагональной: главная ди­агональ, одна поддиагональ и одна наддиагональ. При этом, на k-ом шаге алгоритма ненулевые поддиагональ и наддиагональ оказываются на рассто­янии 2**(k – 1) от главной диагонали (т. е. после каждого шага ненулевые поддиагональ и наддиагональ удаляются вдвое от главной). После ]log2 N[ шагов матрица системы становится единичной, что и завершает работу алгоритма.
Приводимый в этом параграфе алгоритм является применением и обоб­щением на матричный случай метода параллельной редукции, который описан в [14], а условия устойчивой сходимости матричной прогонки опи­саны в [15]. Приводимый ниже алгоритм может быть адаптирован к со­временным ВС. В конце параграфа приводится некоторый анализ условий эффективной реализации такого алгоритма.
На k-ом шаге алгоритма вычисляются сначала три вспомогательных блочных массива (каждая блочная строка умножается на блок, обратный к диагональному).
1
=
1
=
После этого вычисляются элементы k-ой матрицы.
=−∗
ii
=−∗
ii
A IB C C B
=−∗ −∗
ii i
HH B H C H
= −∗ −∗
ii i i
1
k
1
k
Алгоритмы решения СЛАУ с блочно-ленточными матрицами. Глава 3 49
11 1
222 2
333 3
444 4
55 5
11 1
nn n
nn n
AC H
BAH
−− −
          
 
22
22
2 22 33
22 44
22 55
CH
CH
B CH
BH
BH
              
33
33 55
CH
BH
              
              
11
* *1
i i ii ii
−−
+= +
ii i
bca+≤
AC H
B AC H
0 0 00
00 0 0
000 0 0
000 0 0
00 0 0
B AC H
B AC H
BA H
00000
00000
1 0 0 0 00
0 1 0 0 00
0 0 1 0 00
~ ~
0 0 0 1 00
00000 10
00000 01
1 000 00
1
0 100 0 00
0 010 0 00
0 001 0 00
~ ~ ~
1
3
H
2
3
H
3
3
H
4
000 1 00
0 000 0 10
0 000 0 01
3
H
1
n
3
H
n
1
2
0 1 0 00
3
10000 00
01000 00
00100 00
00010 00
00001 00
00000 10
00000 01
1
2
2
H
1
n
2
H
n
4
H
1
4
H
2
4
H
3
4
H
4
.
4
H
5
4
H
7
4
H
8
Оказывается, что диагональное преобладание исходной матрицы яв-
ляется достаточным для корректности этого алгоритма, т. е. на каждом шаге алгоритма блоки главной диагонали будут обратимы и будет со­храняться диагональное преобладание, о чем говорит приводимое ниже утверждение.
Условие диагонального преобладания для блочной матрицы имеет сле-
дующий вид [15]:
B C AB AC
.
Несложно заметить, что при размерности блоков 1, т. е. для скаляр-
ной матрицы, это условие равносильно обычному условию диагонального преобладания
.
50 Б. Я. Штейнберг, О. Б. Штейнберг
11 1 1 11 11
11 1 1
22 2 2
11 11
22 22
* ** *
**
kk k k kk kk
ii
ii
kk k k
ii i i
kk kk
−− − −− −−
−−
−+ +
−− −−
−− ++
+++≤

++ +≤
 
≤+≤

11
11
11 11 11 1 1
22
* * 1* *
kk
kk
kk kk kk k k
ii i i
−−
−−
−− −− −− − − ++
( ) ( ) ( )
( )
11
22
kk
−−
−−
= + +≤
ii
−=
Утверждение. Если исходная матрица системы (5) обладает свойством ди­агонального преобладания, то и после каждого шага алгоритма матрица си­стемы также обладает условием диагонального преобладания. В частности, после каждого шага алгоритма диагональные блоки обратимы.
Доказательство. Рассмотрим вспомогательное неравенство, при получе-
нии которого используется условие диагонального преобладания;
BC B C BB CC
11 1 11 1
kk k kk k
−− − −− −
BC B CB C
i

CB

ii ii
kk
11
−−
i
1.
i
i
Из данного неравенства следуют два нужных впоследствии неравенства:
11 1 1
kk k k
−− − −
BC B C
ii
1
k
* *1
2
ii
1
k
+≤
2
+
BB CC BC B C
ii i i
+ ≤− +
22
−−
( )
Теперь докажем, что на k-ом шаге условие диагонального преобладания
выполняется, если оно выполняется на (k – 1)-ом шаге.
Разлагая первый множитель в ряд фон-Неймана [63, стр. 222], продол-
жим преобразования
11 1
−− −
k k k k k kk
** *
A B A C A BC
i i i i i ii
1* * *
+ +=
( )
( )
+∞
m
0
=
+∞
≤+ −
m
0
=
+ +≤
1
kk k k
11 1 1
−− − −
BC B C B C
ii
kk k k kk kk
BC B C BB CC
i i ii
( )
kk k k
BC B C
ii
( )
1
k
ii
2
11 1 1 11 11
−− − − −− −−
* * ** *
i i ii
11 1 1
−− − −
k
* * *1
ii
2
1
k
2
+
11
kk
−−
22
++
1
2
+
kk
( )
ii
m
( )
1
k
m
( )
11 1 1
kk k k
−− − −
BC B C
ii
1
k
* * 1.
2
1
k
2
+
Конец доказательства.
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]