Вы находитесь на странице: 1из 8

Лекция 10

Одним из научных методов, незаменимых в различных сферах человеческой деятель-


ности, является моделирование. Он применяется там, где невозможно непосредственно рас-
читать будушую систему в силу многих неизвестных характеристик этой системы, невозмо-
жно многократно подвергнуть ее испытананиям, потому что эта система создается в одном
экземпляре, а испытания связаны с большим риском. Моделирование применяется и с целью
предсказать какие либо природные явления. Создать модель системы - это, по сути, описать
систему с помощью каких либо известных человеку знаковых систем, например, с помощью
математических соотношений или уравнений. Но не всегда удается решить эти уравнения в
силу их сложности, громоздкости, существенной нелинейности.
Подобные задачи всегда были двигателем развития вычислительной техники. Чем бо-
льше могли вычислительные машины, тем еще сложнее создавались системы и их модели.
Многие системы описываются с помощью алгебраических и дифференциальных уравнений
и эти уравнения необходимо решать. В этом разделе мы рассмотрим один из подходов к ре-
шению линейных алгебраических уравнений – с помощью итерационных методов.
Многие итерационные методы, например методы Якоби, Зейделя, обладают, как гово-
рят, внутренним параллелизмом, т.е. вычисления этими методами естественным образом
могут быть разделены между множеством параллельных вычислителей. Поэтому стали клас-
сическими как с точки зрения обучения параллельным вычислениям, так и с точки зрения
применения для моделирования сложных технических и природных систем.
Итерационные методы решения линейных уравнений на параллельных и векторных
системах
Мы изучим смысл итерационных методов решения линейных систем на примере мето-
да Якоби. Пусть необходимо решить систему уравнений:
Ax = f , (1)

где матрица [ ]
A = aij , i, j = 1, 2, K , m имеет обратную, x = (x1 , x2 , K, xm )Τ ,
f = ( f1 , f 2 , K, f m )Τ .
Систему (1) можно преобразовать к виду

1  
 − a x + f  , i = 1, 2, K , m
 ∑ ij j i 
xi = (2)
aii
 j ≠i 
Например, при m=3 систему
a11 x1 + a12 x2 + a13 x3 = f1 ;
a 21 x1 + a 22 x2 + a 23 x3 = f 2 ;
a31 x1 + a32 x2 + a33 x3 = f 3 ,
можно преобразовать к виду
1
x1 = (0 − a12 x2 − a13 x3 + f1 ) ;
a11
1
x2 = (− a21 x1 + 0 − a23 x3 + f 2 ) ;
a22
1
x3 = (− a31x1 − a32 x2 + 0 + f 3 ) .
a33
Метод Якоби заключается в представлении формулы (2) в виде итераций:
2

1  
xin +1 =  − a x n + f  , i = 1, 2, K , m , n = 0, 1, K , N
 ∑ ij j i 
(3)
aii
 j ≠i 
где n – номер итерации, а значения xi0 задаются произвольно. Окончание итерационного
процесса определяется либо заданием некоторого максимального значения N, либо условием
max xin +1 − xin < ε (4)
1≤ i ≤ m
где ε некоторое положительное, наперед заданное число.
Нам понадобится также матричная форма записи метода Якоби. Обозначим через
D = diag[a11 , a22 , K, amm ] - диагональную матрицу с той же диагональю, что и у матрицы A.
Тогда уравнение (1) можно записать следующим образом:
Dx + ( A − D )x = f ;
или
Dx = (D − A)x + f .
Умножая слева и справа это уравнение на D −1
D −1Dx = D −1 (D − A)x + D −1 f
и введя новые обозначения : H = D −1 ( D − A) , d = D −1 f , окончательно получим:
x = Hx + d .
С учетом полученной матричной формы метод Якоби можно записать как

x n +1 = Hx n + d . (5)
Матрицу H называют переходной матрицей. Из полученных уравнений видно, что ор-
ганизовать решение линейной системы (1) можно путем циклического вычисления правой
части уравнения (3) или (5). Причем, в последнем случае – это многократное умножение
матрицы на вектор. Параллельные и векторные методы умножения матрицы на вектор мы
рассматривали ранее.
Решение уравнения Пуассона методом Якоби
Итерационный метод Якоби применяется для решения краевых задач уравнений с ча-
стными производными, которые, в свою очередь, относятся к задачам математической физи-
ки.
Одной из задач такого типа является уравнение в частных производных, называемое
уравнением Пуассона:

∂ 2u ∂ 2u
+ = f ( x, y ) (6)
∂x 2 ∂y 2
Если f (x, y ) ≡ 0 , то мы получим уравнение Лапласа. Не теряя общности, предположим, что х
и у принадлежат множеству вещественных чисел в диапазоне [0,1], которое образует прямо-
угольную область Ω на плоскости xy. Пусть функция u имеет начальные значения на грани-
цах области, а правая часть f ( x, y ) – заданная функция. Тогда эту задачу ещё называют зада-
чей Дирихле для уравнения Пуассона.
Используя выражения для конечных разностей и рассматривая область определения Ω
как сетку с шагом h (рис.10.1), частные производные в уравнении Лапласа можно аппрокси-
мировать центральными конечными разностями второго порядка:
∂ 2u ui +1, j − 2ui, j + ui −1, j
∂x 2
=
h 2
( )
+ O h2 (7)

Высокопроизводительные вычислительные системы и параллельное программирование. Кудерметов Р.К.


3

∂ 2u
∂y 2
=
ui, j +1 − 2ui, j + ui, j −1
h 2
( )
+ O h2

Рис.10.1

Если выражения (7) подставить в уравнение Пуассона, то, пренебрегая членами второго
порядка малости, получим:

ui +1, j + ui −1, j + ui, j +1 + ui, j −1 − 4ui, j = h 2 f ij , i, j = 0, 1, K , M . (8)

Записав это соотношение для каждой точки с учётом того, что начальные условия на
границах области заданы, получим систему из M - 1 линейных уравнений. Эту систему
можно решить методом Якоби. Для этого перепишем систему (8) в виде:

uijn +1 =
4
(
1 n
)
ui +1, j + uin−1, j + uin, j −1 + uin, j +1 − h 2 f ij , n = 0, 1, K , N . (9)

Обратите внимание, что каждая итерация в точке сетки есть среднее арифметическое
четырёх соседних точек предыдущей итерации минус некоторая заданная функция.
M2
Рассмотрим возможные реализации метода Якоби для решения задачи Дирихле для
уравнения Пуассона. Если область определения решения представляет собой плоскость, со-
стоящую из M 2 узлов, а число процессоров равно Р, то каждый из них должен обработать
M2
m= узлов. При этом необходимо обеспечить обмен каждого процессора со своими
P
ближайшими соседями, причем, максимальное число соседей равно четырем, минимальное –
M
двум. Число граничных узлов равно q = m = . Один из вариантов разбиения показан на
P
рис.10.2, где используется всего четыре процессора, а число узлов равно 64. Для этого слу-
чая на каждый процессор приходится по 16 узлов для обработки, а длина массива для обмена
между двумя любыми процессорами равна 4. Очевидно, что при увеличении размера сетки
числа узлов, подлежащих обработки увеличивается пропорционально квадрату размера сет-
ки, а число узлов, между которыми необходимо произвести обмен данными – растет по ли-
нейному закону. Таким образом, при некотором размере сетки время затрачиваемое на вы-
числения будет превосходить время, необходимое на пересылки данных и, следовательно
ускорение станет выше единицы, т.е. применение параллельной вычислительной системы
станет эффективным.
Для организации параллельных вычислений, как показано на рисунке, необходимо вве-
сти дополнительные слои, называемые теневыми (обозначены как sh и sv), которые обеспе-
Высокопроизводительные вычислительные системы и параллельное программирование. Кудерметов Р.К.
4

чивают граничные условия для каждой области. В эти области после каждой итерации зано-
сятся результаты, полученные для первого внутреннего слоя соседней области. На рис.10.3
показаны графики зависимости количества внутренних узлов m (объем вычислений) и гра-
ничных узлов q (объем пересылок) от размерности сетки M.

Рис.10.2
При выполнении итераций по методу Якоби необходимо отметить следующие два об-
стоятельства.

Рис.10.3
Если задача определена на трехмерной области, то не трудно показать, что объем вы-
числений с ростом размера сетки возрастает пропорционально кубу, а объем пересылок –
пропорционально квадрату этого размера.
Отметим так же такое обстоятельство. Если выполняются условия сходимости (здесь
их не рассматриваем) метода Якоби для конкретно решаемой системы, то задачу можно ре-
шать в асинхронном режиме, т.к. что отдельные ошибочные итерации, вызванные несвое-
временным обменом между соседними областями разбиения не скажутся на окончательном
результате, а могут лишь увеличить общее время вычислений.

Высокопроизводительные вычислительные системы и параллельное программирование. Кудерметов Р.К.


5

Векторизация метода Якоби


Рассмотрим реализацию метода Якоби для уравнения Пуассона на векторном процес-
соре. Для представления всех узлов сетки, включая граничные условия нам необходим мас-
сив размера (N+2)×(N+2). Тогда алгоритм можно записать так:
for(j=1;j<=N;j++)
for(i=1;i<=N;i++)
u[i][j]=0,25*(u[i][j+1]+ u[i][j-1]+ u[i+1][j]+ u[i-1][j]-f[i][j]);

Если длина векторных регистров в вычислителе позволяет, то процесс может быть ор-
ганизован так:

Рис.10.4
Процесс, показанный на рис.10.4. представляет всего лишь одну итерацию по одному
столбцу рассматриваемой плоской сетки (рис.10.1). Ясно, что затем, необходимо аналогич-
ные векторные операции провести с другими столбцами. Когда все столбцы будут пересчи-
таны, завершится первая итерация. Далее необходимо продолжить процесс, снова начиная с
первого и т.д. пока не выполнится условие (4). Рассмотренная схема вычислений относится к
случаю, когда длина векторных регистров процессора равна числу узлов вдоль одного
измерения сетки. В реальных задачах, понятно, дрина регистра значительно меньше, поэтому
всю сетку делят на слои, равные по ширине длине векторного регистра и вычисления
выполняют по слоям. Крооме того, Итерационный процесс существенно может зависеть от
других архитектурных особенностей процессора: числа векторных регистров, возможности
совмещения арифметических операций с операциями загрузки и сдвига, наличия регистров
для хранения промежуточных результатов.
Векторизация метода Якоби с использованием матричного умножения
Рассмотрим ещё одну возможность векторизации процесса решения уравнений типа
Пуассона методом Якоби. Воспользуемся таким примером. Пусть имеется область, на кото-
рой ищется решение Ω=[0,1]*[0,1]; Разобьем её с шагом n следующим образом:

Высокопроизводительные вычислительные системы и параллельное программирование. Кудерметов Р.К.


6

Рис.10.5

Тогда можно составить 9 уравнений в центральных конечных разностях:


1
u11 = (u 01 + u 21 + u10 + u12 − h 2 f11 );
4
1
u12 = (u02 + u 22 + u11 + u13 − h 2 f12 );
4
1
u13 = (u 03 + u 23 + u12 + u14 − h 2 f13 );
4

. . . . . . . . . . . . . . . . . . . . . .
1
u33 = (u 23 + u 43 + u32 + u34 − h 2 f 33 );
4

Введём обозначения:
x1 = u11 , x2 = u12 , x3 = u13 ,
x4 = u 21 , x5 = u 22 , x6 = u 23 ,
x7 = u31 , x8 = u32 , x9 = u33 .
Тогда запишем систему в виде:

4 x1 − x2 + 0 − x4 + 0 + 0 + 0 + 0 + 0 = u01 + u10 − h 2 f11 ;


− x1 + 4 x2 − x3 + 0 − x5 + 0 + 0 + 0 + 0 = u02 − h 2 f12 ;
0 − x2 + 4 x3 + 0 + 0 − x6 + 0 + 0 + 0 = u03 + u14 − h 2 f13 ;
. . . .. . . . . . . . . . . . . . . . . . . . . .
0 + 0 + 0 + 0 + 0 − x6 + 0 − x8 + 4 x9 = u34 + u 43 − h 2 f 33 .
В матричном виде эта система будет иметь вид:

Ax = f ,
где
x = (x1 , x2 , K, x9 )Τ ;

Высокопроизводительные вычислительные системы и параллельное программирование. Кудерметов Р.К.


7

 4 − 1 0 − 1 0 0 0 0 0
 − 1 4 − 1 0 − 1 0 0 0 0
 
 0 − 1 4 0 0 − 1 0 0 0
 
 − 1 0 0 4 − 1 0 − 1 0 0
A =  0 − 1 0 − 1 4 − 1 0 − 1 0 ;
 
 0 0 − 1 0 − 1 4 0 0 − 1
 0 0 0 − 1 0 0 4 − 1 0
 
 0 0 0 0 − 1 0 − 1 4 − 1
 0 0 0 0 0 − 1 0 − 1 4
 

u01 + u10 − h 2 f11 


 2 
u02 − h f12 
f = u03 + u14 − h f13  .
 2
 
K 
 2 
u34 + u 43 − h f 33 
Обозначим блоки матрицы A следующим образом:

 4 − 1 0  1 0 0 0 0 0 
T = − 1 4 − 1 ; I = 0 1 0 ; O = 0 0 0 .
 0 − 1 4 0 0 1 0 0 0

Тогда
 T −I O
A = − I T − I  .
 O − I T 

Получим переходную матрицу H

4 0 0 0.25 0 0 G I O  0 1 0 
D =  0 O  −1 
0 , D =  0 O 0 , D − A =  I G I  , G =  1 0 1 .
  
 0 0 4  0 0 0.25 O I G  0 1 0

 0 0.25 0 0.25 0 0 0 0 0
0.25 0 0.25 0 0.25 0 0 0 0

 0 0.25 0 0 0 0.25 0 0 0
 
0.25 0 0 0 0.25 0 0.25 0 0
H = D −1 (D − A) =  0 0.25 0 0.25 0 0.25 0 0.25 0
 
 0 0 0.25 0 0.25 0 0 0 0.25
 0 0 0 0.25 0 0 0 0.25 0
 
 0 0 0 0 0.25 0 0.25 0 0.25
 0 0 0 0 0 0.25 0 0.25 0

Высокопроизводительные вычислительные системы и параллельное программирование. Кудерметов Р.К.


8

Итак, мы получили переходную матрицу, состоящую из пяти диагоналей, причем эти


диагонали имеют достаточно регулярную структуру. Поэтому нет необходимости хранить
эту матрицу целиком в памяти и применять традиционный способ умножения матрицы на
вектор, т.к. матрица содержит много нулевых элементов. В данном случае более пригоден
метод умножения по диагоналям, реализованный на векторной вычислительной системе.

Высокопроизводительные вычислительные системы и параллельное программирование. Кудерметов Р.К.

Вам также может понравиться