1
Лекция 9
Ленточные матрицы
Большинство матриц, встречающихся на практике, являются разряженными, т.е. большая часть компонентов таких матриц является нулями. Одним из типов разряженных матриц являются ленточные матрицы. Определение: матрица А порядка n (рассматриваем пока
квадратные матрицы) называется ленточной, если aij=0 при i-j>β2 и j-i>β1. Пример для n=5;
β1=2; β2=1:
a |
a |
a |
0 |
|
|
11 |
12 |
13 |
|
a21 |
a22 |
a23 |
a24 |
|
|
0 |
a32 |
a33 |
a34 |
|
0 |
0 |
a43 |
a44 |
|
||||
|
0 |
0 |
0 |
a54 |
|
0
0
a35 a45
a55
Очень часто лента бывает симметричной, т.е. β1=β2=β. Число β называется полушириной ленты.
Для двух рассмотренных методов умножения матрицы на вектор – скалярного умножения векторов и линейной комбинацией столбцов длины векторов изменяются от β+1 до 2β+1. Действительно:
|
(a |
, X ) |
|
|
1 |
|
|
1) AX = (a2 , X ) |
|||
|
|
M |
|
|
|
|
|
(an |
, X ) |
где ai - строки матрицы А; в симметричной матрице при β=1 они будут иметь вид: a1 =[a11, a12 , 0, 0K]; a2 =[a21, a22 , a23 , 0, 0K]; ... an =[0, 0,K, an,n−1, ann ];
n
2)AX = ∑xi ai , где ai – столбцы имеют вид:
i=1
т.е.: ai
a1 =[a11, a21, 0, 0K]T ; a2 =[a21, a22 , a23 , 0, 0K]T ;...; an =[0, 0,K, an,n−1, ann ]T ;
Для первого алгоритма, если предположить p=n (p-число процессоров, все n скалярные произведения типа):
n
(ai , X ) = ∑aij x j
j =1
будут выполняться параллельно. Если число процессоров p=n/k, то первые k скалярных произведений можно выполнять на первом процессоре, вторые – на втором и т.д. Таким образом, степень параллелизма максимальная.
Для второго представления мы также можем распараллелить умножение векторовстолбцов матрицы А на компоненты вектора X, но затем нам необходимо организовать сложение результатов.
Что касается реализации на векторных компьютерах, то оба представления не эффективны, т.к. длины векторов малы. (от β+1 до 2β+1).
Высокопроизводительные вычислительные системы и параллельное программирование. Кудерметов Р.К.
2
Аналогичные выводы можно сделать для алгоритмов умножения матриц. Следует отметить, что при умножении двух квадратных матриц, полуширина ленты первой из которых равна α, а полуширина второй - β, то полуширина матрицы произведения будет равна α+β.
При использовании алгоритмов средних и внешних произведений, длины векторов изменяются от α+1 до 2α+1. При использовании их двойственных алгоритмов соответственно длины векторов изменяются от β+1 до 2β+1., поэтому при α<β имеет смысл использовать двойственные алгоритмы средних и внешних произведений.
Алгоритм внутренних произведений (3а) и (4а) наиболее хорошо реализуются на параллельных процессорах. При этом на каждом из процессоров реализуется соответствующее скалярное произведение вектора-строки (столбца) матицы А на вектор-столбец матрицы В, причём, реально необходимо вычислять лишь скалярное произведения, соответствующие элементам ленты α+β.
Умножение по диагоналям
Как мы убедились выше, умножение ленточных матриц рассмотренными способами крайне неэффективно на векторных компьютерах в силу больших размерностей матриц и малой ширины лент. Проблема усугубляется, если в пределах лент встречаются нулевые диагонали, да ещё и разнесённые на значительные расстояния. Определение: матрицы с относительно небольшим числом нулевых диагоналей называются диагонально-разряженными матрицами. К отмеченным трудностям работы с такими матрицами следует отнести и хранение таких матриц в памяти. Естественно напрашивается способ хранения их по диагоналям, т.е. каждая диагональ может интерпретироваться как вектор, и хранится в виде вектора.
Рассмотрим умножение ленточной матрицы с симметричной лентой на вектор. Обозначим как показано на схеме: А0 – главная диагональ, А-1 – первая диагональ ниже главной, А1 – первая диагональ выше главной и т.д.
|
O .O .O |
|
|
|
|
A |
.O O .O |
.O |
|
|
|
−1 |
|
|
|
|
|
A−2 |
|
.O O |
|
|
Ap |
O |
.O .O |
||||
A−q O O .O O .O |
A1 |
||||
|
|
O O |
.O O |
A |
|
|
|
|
|
|
0 |
Для наглядности приведём пример для n=5:
a11 |
a12 |
0 |
0 |
0 |
x1 |
|
a11x1 |
|
a12 x2 |
|
0 |
|
|
0 |
|
|
|
0 |
|
|
||||||||||||||||
a |
21 |
a |
22 |
a |
23 |
0 |
0 |
|
x |
2 |
|
a |
x |
|
a |
22 |
x |
2 |
|
a |
23 |
x |
|
|
0 |
|
|
|
0 |
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
21 1 |
|
|
|
|
|
3 |
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
0 |
a32 |
a33 |
a34 |
0 |
|
x3 |
|
= |
0 |
|
+ a32 x2 |
|
+ a33 x3 |
|
+ a34 x4 |
|
+ |
0 |
|
= |
|||||||||||||||
|
0 |
0 |
a |
43 |
a |
44 |
a |
45 |
|
x |
4 |
|
|
0 |
|
|
0 |
|
|
a |
43 |
x |
|
a |
44 |
x |
4 |
|
a |
45 |
x |
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3 |
|
|
|
|
|
5 |
|
|
||||||||
|
0 |
0 |
0 |
a |
54 |
a |
55 |
|
x |
|
|
0 |
|
|
0 |
|
|
|
0 |
|
|
a |
54 |
x |
4 |
|
a |
55 |
x |
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
5 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5 |
|
|
или поменяв некоторые слагаемые местами, представим в виде:
a11x1 |
|
a12 x2 |
|
0 |
|
|
||||||||
a |
22 |
x |
2 |
|
a |
23 |
x |
|
a |
|
x |
|
||
|
|
|
|
3 |
|
|
|
21 1 |
|
|||||
a33 x3 |
|
+ a34 x4 |
|
+ a32 x2 |
|
|||||||||
a |
44 |
x |
4 |
|
a |
45 |
x |
|
a |
|
|
x |
|
|
|
|
|
|
5 |
|
|
43 3 |
|
||||||
a |
x |
5 |
|
|
0 |
|
|
a |
54 |
x |
4 |
|
||
|
55 |
|
|
|
|
|
|
|
|
|
Для обобщения на произвольные размеры введём обозначения: А0 – главная диагональ; А1 - первая выше; А-1 - первая ниже и т.д.; x j =(x j ,K, xn ); xn− j =(x1,Kxn− j ) . Тогда:
Высокопроизводительные вычислительные системы и параллельное программирование. Кудерметов Р.К.
3
AX = A X +^ |
A x2 |
+^ ...+^ |
A |
p |
x p +1 |
+A |
x |
n−1 |
+K+ A |
x |
n−q |
0 |
1 |
|
|
|
−1 |
|
−q |
|
где произведения означают покомпонентное умножение векторов, +^ - прибавление более короткого вектора к первым компонентам более длинного, + - прибавление более короткого
вектора к последним компонентам более длинного. Для нашего примера при n=5 будет:
^
AX = A0 x +A1x2 + A−1x4
Следует заметить, что этот способ работоспособен и для заполненных матриц, при этом необходимо выполнить 2n-1 произведение векторов, а длины векторов изменяются от 1 до n. Поскольку заполненные матрицы, как правило, не хранятся по диагоналям, а длины векторов меняются от 1 до n, то для них этот способ неэффективен. С другой стороны, если матрица ленточная и длины диагоналей n, n-1, n-2, то алгоритм ленточного умножения становится максимально векторизуемым, т.е. имеет максимальную степень векторизации. Таким образом, существует некоторое значение ширины ленты β, для конкретной векторной машины, при котором реализация ленточного умножения эффективна, а при значениях β*>β более эффективна реализация методами линейных комбинаций (2а) или скалярных произведений
(1а).
Высокопроизводительные вычислительные системы и параллельное программирование. Кудерметов Р.К.