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

[ООП] / Лекции / Lecture_9

.pdf
Скачиваний:
34
Добавлен:
07.02.2016
Размер:
127.29 Кб
Скачать

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,n1, 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,n1, 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

 

 

 

 

 

A2

 

.O O

 

 

Ap

O

.O .O

Aq 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 ); xnj =(x1,Kxnj ) . Тогда:

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

3

AX = A X +^

A x2

+^ ...+^

A

p

x p +1

+A

x

n1

+K+ A

x

nq

0

1

 

 

 

1

 

q

 

где произведения означают покомпонентное умножение векторов, +^ - прибавление более короткого вектора к первым компонентам более длинного, + - прибавление более короткого

вектора к последним компонентам более длинного. Для нашего примера при n=5 будет:

^

AX = A0 x +A1x2 + A1x4

Следует заметить, что этот способ работоспособен и для заполненных матриц, при этом необходимо выполнить 2n-1 произведение векторов, а длины векторов изменяются от 1 до n. Поскольку заполненные матрицы, как правило, не хранятся по диагоналям, а длины векторов меняются от 1 до n, то для них этот способ неэффективен. С другой стороны, если матрица ленточная и длины диагоналей n, n-1, n-2, то алгоритм ленточного умножения становится максимально векторизуемым, т.е. имеет максимальную степень векторизации. Таким образом, существует некоторое значение ширины ленты β, для конкретной векторной машины, при котором реализация ленточного умножения эффективна, а при значениях β*>β более эффективна реализация методами линейных комбинаций (2а) или скалярных произведений

(1а).

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

Соседние файлы в папке Лекции