Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Алгоритмы решения систем линейных уравнений с блочно-ленточными матрицами. Монография
.pdf
Алгоритмы решения СЛАУ с блочно-ленточными матрицами. Глава 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
+
Конец доказательства.
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
