Опубликован: 08.07.2008 | Доступ: свободный | Студентов: 1202 / 306 | Оценка: 4.67 / 4.33 | Длительность: 13:24:00
Специальности: Программист, Математик
Лекция 9:

Типовые информационные структуры

< Лекция 8 || Лекция 9: 123 || Лекция 10 >
Аннотация: Перемножение матриц, решение треугольных систем, неожиданный эффект, система с блочно-двухдиагоналъной матрицей, макро- и микрореализации, явная схема для уравнения теплопроводности, макро- и микропараллелизм, локальный алгоритм, очень "простой" пример, гипотеза о типовых структурах

Рассмотрим некоторые примеры графов конкретных алгоритмов. Мы не будем строить графы в пространствах итераций и не будем описывать их покрывающие функции. Со всем этим можно познакомиться в [ 1 ] . Мы будем размещать графы в подходящих пространствах малой размерности. Выбор размещения будет определяться только тем, чтобы можно было легко показать информационную структуру самих алгоритмов и продемонстрировать возможные наборы линейных разверток. В соответствии с определением графа алгоритма не нужно указывать дуги, связанные с рассылкой одних и тех же входных данных по вершинам графа. И очень часто они показываться не будут, главным образом, из-за сложности их изображения. Но иногда мы будем отступать от этого правила.

Перемножение матриц. Пусть решается классическая задача вычисления произведения А=ВС двух квадратных матриц В, С порядка n. Будем считать элементы матриц А, В, С числами и обозначим их a_{ij},b_{ik},c_{kj}. Согласно определению операции умножения матриц имеем

a_{ij}=\sum_{k=1}^n b_{ik}c_{kj},\;i,j=1,2,\ldots,n
Эти формулы довольно часто используются для непосредственного вычисления элементов матрицы A. Сами по себе они не определяют алгоритм однозначно, так как не определен порядок суммирования произведений bikckj под знаком суммы. Однако заметим, что явно виден параллелизм вычислений. Выражается он отсутствием указания о соблюдении какого-либо порядка перебора индексов i, j.

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

\begin{gathered}
a_{ij}^{(0)}=0.\\
a_{ij}^{(k)}=a_{ij}^{(k-1)}+b_{ik}c_{kj},\quad i,j,k=1,2,\ldots,n,\\
a_{ij}=a_{ij}^{(n)}.
\end{gathered}
Снова явно указан параллелизм перебора индексов i, j. Однако по индексу k параллелизма нет, так как этот индекс должен перебираться последовательно от 1 до n.

Построим теперь граф этого алгоритма. Будем считать, что вершины графа соответствуют операциям вида a+bc. Чтобы не вносить в исследование графа алгоритма неоправданные дополнительные трудности, вершины графа нельзя располагать произвольно. Приемлемый способ их расположения подсказывает сама форма записи. Рассмотрим прямоугольную решетку в трехмерном пространстве с координатами i, j, k. Во все целочисленные узлы решетки для 1\le i,j,l\le n поместим вершины графа. Анализируя запись, нетрудно убедиться в том, что в вершину с координатами i, j, k для k>1 будет передаваться результат выполнения операции, соответствующей вершине с координатами i,j,k-1.

Граф перемножения матриц

Рис. 9.1. Граф перемножения матриц

Граф алгоритма устроен достаточно просто. Он распадается на n^2 не связанных между собой подграфов. Каждый подграф содержит n вершин и представляет один путь, расположенный параллельно оси k. Как и следовало ожидать, в графе отражен тот же параллелизм, который был явно указан в записи. Для n=2 граф алгоритма представлен на рис. 9.1. Граф имеет полный набор линейных разверток, в качестве направляющих векторов которых могут быть взяты, например, координатные векторы. Векторы вдоль осей i, j дают обобщенные развертки, вектор вдоль оси k - строгую.

Системы с треугольной матрицей. Пусть теперь решается система алгебраических линейных уравнений Ax=b с невырожденной треугольной матрицей A порядка n методом обратной подстановки. Обозначим через a_{ij},b_i,x_i элементы матрицы, правой части и вектор-решения. Предположим для определенности, что матрица A левая треугольная с диагональными элементами, равными 1. Тогда имеем

x_1=b_1, \; x_i=b_i - \sum_{j=1}^{i-1} a_{ij}x_j \quad 2\le i\le n.
Эта запись также не определяет алгоритм однозначно, так как не определен порядок суммирования. Рассмотрим, например, последовательное суммирование по возрастанию индекса j. Соответствующий алгоритм можно записать следующим образом
\begin{gathered}
x_i^{(0)}=b_i,\\
x_i^{(j)}=x_i^{(j-1)}-a_{ij}x_j^{(j-1)},\;i=1,2,\ldots,n,\; j=1,2,\ldots,i-1,\\
x_i=x_i^{(i-1)}.
\end{gathered}

Основная операция алгоритма имеет вид a-bc. Выполняется она для всех допустимых значений индексов i,j. Все остальные операции осуществляют присваивание. В декартовой системе координат с осями i,j построим прямоугольную координатную сетку с шагом 1 и поместим в узлы сетки при 2\le i\le n, \; 1\le j\le i-1 вершины графа, соответствующие операциям a-bc. Анализируя связи между операциями, построим граф алгоритма, включив в него также вершины, символизирующие ввод данных a_ij и b_i. Этот граф для случая n = 5 представлен на рис. 9.2 слева. Верхняя угловая вершина на левом рис. 9.2 находится в точке с координатами i=1, j=0. Граф имеет полный набор линейных разверток, в качестве направляющих векторов которых могут быть взяты, например, координатные векторы. Векторы вдоль оси i дает обобщенную развертку, вектор вдоль оси j - строгую.

Графы для треугольных систем

Рис. 9.2. Графы для треугольных систем

Если при вычислении суммы мы останавливаемся по каким-то соображениям на последовательном способе суммирования, то выбор суммирования именно по возрастанию индекса j был сделан, вообще говоря, случайно. Так как в этом выборе пока не видно каких-либо преимуществ, то можно построить алгоритм обратной подстановки с суммированием по убыванию индекса j. Соответствующий алгоритм таков:

\begin{gathered}
x_i^{(i)}=b_i,\\
x_i^{(j)}=x_i^{(j+1)}-a_{ij}x_j^{(j)},\;i=1,2,\ldots,n,\;j=i-1,i-2,\ldots,1,\\
x_i=x_i^{(1)}.
\end{gathered}
Его граф для случая n=5 представлен на рис. 9.2 справа. Теперь верхняя угловая вершина находится в точке с координатами i=1,j=1.

Пытаясь размещать вершины, соответствующие операциям типа a-bc, по ярусам хотя бы какой-нибудь параллельной формы, мы обнаруживаем, что теперь в каждом ярусе может находиться только одна вершина. Объясняется это тем, что все вершины графа на правом рис. 9.2 лежат на одном пути. Этот путь показан пунктирными стрелками. Граф алгоритма имеет только одну линейную развертку, причем обобщенную. Ее направляющий вектор направлен вдоль оси i.

Полученный результат трудно было ожидать. Действительно, оба рассмотренных алгоритма предназначены для решения одной и той же задачи. Они построены на одних и тех же исходных формулах и в отношении точных вычислений эквивалентны. Оба алгоритма совершенно одинаковы с точки зрения их реализации на однопроцессорных компьютерах, так как требуют выполнения одинакового числа операций умножения и вычитания и одинакового объема памяти. На классе треугольных систем оба алгоритма даже эквивалентны с точки зрения влияния ошибок округления. Тем не менее, графы обоих алгоритмов принципиально отличаются друг от друга. Если эти алгоритмы реализовывать на параллельной вычислительной системе, имеющей n универсальных процессоров, то первый алгоритм можно реализовать за время пропорциональное n, а второй - только за время пропорциональное n^2. В первом случае средняя загруженность процессоров близка к 0,5, во втором случае она близка к 0.

Таким образом, алгоритмы, совершенно одинаковые с точки зрения реализации на "обыкновенных" компьютерах, могут быть принципиально различными с точки зрения реализации на параллельных компьютерах.

Система с блочно-двухдиагональной матрицей. Среди многих задач линейной алгебры, возникающих при решении уравнений математической физики сеточными методами, часто встречается задача решения систем линейных алгебраических уравнений с блочно-двухдиагональными матрицами. При этом вне диагональные блоки представляют диагональные матрицы, диагональные блоки — двухдиагональные матрицы. Будем считать для определенности, что матрица системы является левой треугольной. Пусть она имеет блочный порядок m и порядок блоков, равный n. Итак, рассмотрим систему линейных алгебраических уравнений Au=f следующего вида:

\begin{bmatrix}
B_1\\
D_1 & B_2 & & & O \\
& D_2 & B_3 \\
\ldots & \ldots & \ldots & \ldots & \ldots \\
O & & & D_{m-1} & B_m
\end{bmatrix}
\begin{bmatrix}
U_1 \\ U_2 \\ U_3 \\ \vdots \\ U_m
\end{bmatrix}
=
\begin{bmatrix}
F_1 \\ F_2 \\ F_3 \\ \vdots \\ F_m
\end{bmatrix}
где
\begin{gathered}
B_k=
\begin{bmatrix}
b_{1k} \\
e_{1k} & b_2k & & & O \\
& e_{2k} & b_{3k} \\
\ldots & \ldots & \ldots & \ldots & \ldots \\
O & & & e_{n-1,k} & b_{nk}
\end{bmatrix}, \quad
D_k=
\begin{bmatrix}
d_{1k} \\
& d_{2k} & & & O \\
& & d_{3k} \\
& & & \ldots \\
O & & & & d_{nk}
\end{bmatrix}, \\
U_k=
\begin{bmatrix}
u_{1k} \\ u_{2k} \\ \vdots \\u_{nk}
\end{bmatrix}, \quad
F_k
\begin{bmatrix}
f_{1k} \\ f_{2k} \\ \vdots \\f_{nk}
\end{bmatrix}
\end{gathered}

< Лекция 8 || Лекция 9: 123 || Лекция 10 >
Егор Самсонов
Егор Самсонов
Павел Иванихин
Павел Иванихин