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

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

< Лекция 8 || Лекция 9: 123 || Лекция 10 >

Решение блочно-двухдиагональной системы определяется рекуррентно:

U_k=B_k^{-1}(F_k-D_{k-1}U_{k-1}),\; 1\le k\le m,
если положить U_0=0,\;D_0=0. Макрооперация X=B^{-1}(F-DY) вычисляет вектор X по векторам F, Y и матрицам B, D. Построим граф алгоритма, считая, что каждая из его вершин соответствует данной макрооперации. Очевидно, он будет таким, как показано на рис. 9.3. Большие размеры вершин и дуг на рисунке подчеркивают, что операции являются сложными и передается сложная информация.

Макрограф для блочно-диагональной системы

Рис. 9.3. Макрограф для блочно-диагональной системы

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

Исследуем поэлементную запись алгоритма решения блочно- двухдиагональной системы. С учетом введенных ранее обозначений элементов матриц и векторов имеем:

\begin{gathered}
u_{ik}=(f_{ik}-e_{i-1,k}u_{i-1,k}-d_{i,k-1}u_{i,k-1})b_{ik}\\
k=1,2,\ldots,m,\; i=1,2,\ldots,n.
\end{gathered}

При этом предполагается, что u_{i0}=u_{0k}=e_{0k}=d_i0 для всех i,k. В этой записи основной и, по существу, единственной является скалярная операция

u=b^{-1}(f-ex-dy),
которая вычисляет величину u по величинам f, e, x, y, b, d. Для построения графа алгоритма рассмотрим прямоугольную решетку, узлы которой имеют целочисленные координаты i,k. Во все узлы решетки для 1\le i\le n, 1\le k\le m поместим вершины графа и будем считать, что они соответствуют операции u. Не будем указывать вершины, поставляющие входные данные и нулевые значения некоторых аргументов. Анализируя поэлементную запись, нетрудно убедиться в том, что в вершину с координатами i,k будут передаваться результаты выполнения операций, соответствующих вершинам с координатами i-1, k и i,k-1. Вся остальная информация, необходимая для реализации операции с координатами i,k, является входной и нужна для реализации только этой операции.

Граф для блочно-двухдиагональной системы

Рис. 9.4. Граф для блочно-двухдиагональной системы
Ярусы обобщенной параллельной формы

Рис. 9.5. Ярусы обобщенной параллельной формы

Для случая n=5,m=9 граф алгоритма представлен на рис. 9.4. Из него следует, что вопреки возможным ожиданиям граф алгоритма прекрасно распараллеливается. Граф имеет полный набор обобщенных линейных разверток, в качестве направляющих векторов которых могут быть взяты координатные векторы. Линейная развертка с направляющим вектором (1,1) является строгой. На рис. 9.5 в этом же графе пунктирными линиями обведены группы вершин. Каждая из таких групп соответствует одной макровершине графа, представленного на рис. 9.3. Из этих рисунков видно, каким образом хорошо распараллеливаемый алгоритм может превратиться в нераспараллеливаемый при неудачном укрупнении операций.

Явная схема для уравнения теплопроводности. Рассмотрим далее решение краевой задачи для одномерного уравнения теплопроводности. Пусть требуется найти решение u(y,z), где

\begin{gathered}
\frac{\partial u}{\partial y}=\frac{\partial^2 u}{\partial z^2},\; 0\le z,0\le y\le T\\
u(0,z)=\varphi(z),\;u(y,0)=u_0(y),\;u(y,1)=u_1(y).
\end{gathered}

Построим равномерную сетку с шагом h no z и шагом \tau по y. Предположим, что по тем или иным причинам выбора выбрана явная схема

\frac{u_j^{(i)}-u_j^{(i-1)}}{\tau}=\frac{u_{j-1}^{(i-1)}-2u_j^{i-1}+u_{j+1}^{(i-1)}}{h^2}
Пусть алгоритм реализуется в соответствии с формулой
u_j^{(i)}=u_j^{(i-1)}+\frac{\tau}{h^2}(u_{j-1}^{(i-1)}-2u_j^{(i-1)}+u_{j+1}^{(i-1)}).
Для построения графа алгоритма введем прямоугольную систему координат с осями i,j. Переменные y,z связаны с переменными i,j соотношениями
y=\tau i,\; z=hj.
Поместим в каждый узел целочисленной решетки вершину графа и будем считать ее соответствующей скалярной операции
\omega=a(1-\frac{2\tau}{h^2})+\frac{\tau}{h^2}(b+c),
выполняемой для разных значений аргументов a,b,c. Для случая h=1/8,\;\tau=T/6 граф алгоритма представлен на обоих рисунках 9.6. На границе области расположены вершины, символизирующие ввод начальных данных и граничных значений. Граф имеет полный набор обобщенных линейных разверток. В качестве их направляющих векторов в системе координат i,j могут быть взяты, например, векторы (1,1) и (1,-1). Имеются и строгие линейные развертки. Одна из них задается направляющим вектором (1,0).

Микро- и макропараллелизм в графе

Рис. 9.6. Микро- и макропараллелизм в графе

Операции одного яруса этой развертки не зависят друг от друга и их можно реализовывать на разных устройствах одновременно. Но эффективность такой организации параллельных вычислений может оказаться очень низкой. На рис. 9.6 слева пунктирными линиями показаны ярусы максимальной параллельной формы алгоритма. Предположим, что операции реализуются по этим ярусам. Каждая операция одного яруса требует трех аргументов. Они являются результатами выполнения операций на предыдущем ярусе. Если данные, полученные на одном ярусе, могут быстро извлекаться из памяти, то никаких серьезных проблем с реализацией алгоритма по ярусам параллельной формы не возникает. Однако для больших многомерных задач ярусы оказываются столь масштабными, что информация о них может не поместиться в одной быстрой памяти. Тогда для ее размещения приходится использовать либо медленную, либо распределенную память. Для этих видов памяти время выборки одного числа может существенно превышать время выполнения базовой операции. Это означает, что при переходе к очередному ярусу время, затраченное на выполнение операций, может оказаться значительно меньше времени взаимодействия с памятью. Чем меньше отношение времени выполнения операций к времени доступа к памяти, тем меньше эффективность реализации алгоритма по ярусам параллельной формы. В этом случае большая часть времени работы параллельного компьютера будет тратиться на осуществление обменов с памятью, а не на собственно счет.

Ранее уже отмечалось, что знание двух и более обобщенных разверток позволяет перейти от микроописания алгоритма к его макроописанию. Такой переход показан на рис. 9.6 справа. Поверхности уровней обобщенных разверток разбивают область задания графа на многогранники. Исходный алгоритм теперь можно реализовывать по полученным многогранникам, в том числе, параллельно. При этом одному процессору всегда поручается выполнение всех операций, относящихся к одному многограннику. При параллельной реализации сначала выполняются операции, соответствующие нижним заштрихованным многогранникам на правом рис. 9.6. Затем параллельно выполняются операции, соответствующие соседним незаштрихованным многогранникам и т. д.

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

Метод Жордана. Рассмотрим решение системы линейных алгебраических уравнений методом Жордана без выбора ведущего элемента. Этот метод можно записать многими различными способами. Пусть, например, он записан так:

\begin{aligned}
&1.\; l_1=1/a_{1k},\qquad\qquad\; k=1,\ldots,n,\\
&2.\; l_p=-a_pk,\qquad\qquad\; k=1,\ldots,n,\;p=2,\ldots,n,\\
&3.\; u_j=a_{1j}l_1,\qquad\qquad\; k=1,\ldots,n,\;j=k+1,\ldots,n+1,\\
&4.\; a_{i-1,j}=a_{ij}+l_iu_j,\quad k=1,\ldots,n,\;j=k+1,\ldots,n+1,\; i=2,\ldots,n,\\
&5.\; a_{nj}=u_j,\qquad\qquad\quad k=1,\ldots,n,\;j=k+1,\ldots,n+1
\end{aligned}

Будем считать, что n\ge 3. Расположим опорные многогранники операторов 1-3, 5 вокруг опорного многогранника оператора 4. Область, занимаемая вершинами графа алгоритма, изображена на рис. 9.7.

Расположение вершин метода Жордана

Рис. 9.7. Расположение вершин метода Жордана

Она представляет усеченную пирамиду, из которой исключено ребро 6. Вершины опорного многогранника 1 расположены на ребре 1, многогранника 2 - на грани 2, многогранника 3 - на грани 3, многогранника 5 - на грани 5, вершины опорного многогранника 4 расположены в остальной части пирамиды. Основной объем вычислений приходится на оператор 4, который является телом тройного цикла. Неоднородности вычислений, связанные с операторами 1 - 3, 5, локализованы на границе. Структура связей в графе показана на рис. 9.8.

Граф метода Жордана

Рис. 9.8. Граф метода Жордана

Граф является регулярным. В каждую его вершину входят и выходят дуги, определяемые векторами (1, 0, -1), (0, 1, 0), (0, 0, 1) в системе координат k,j,i. Рассылка элементов u_j осуществляется вдоль прямых, параллельных оси i. Она начинается на грани 3 и заканчивается на грани 5, проходя через соответствующие точки пирамиды. Рассылка элементов l_p начинается на грани 2 и ребре 1 и проходит через соответствующие точки пирамиды на прямых, параллельных оси j. При этом полагается, что p совпадает с i. Входные данные алгоритма, т.е. элементы матрицы и правой части, поступают через нижнюю грань. Граф имеет полный набор обобщенных линейных разверток. В качестве их направляющих векторов в системе координат k,j,i могут быть взяты, например, векторы (1, 0, 0), (1, 0, 1) и (0, 1, 0). Имеются и строгие линейные развертки. Одна из них задается направляющим вектором (2, 1, 1).

Заметим, что в отличие от других графов описанная укладка графа для метода Жордана появилась далеко не сразу. Пришлось перепробовать много вариантов, прежде чем удалось найти столь красивое расположение графа. Возможно, что у графа каждого отработанного и хорошо изученного алгоритма можно найти какие-то изящные укладки. Вот только обнаружить их очень не просто. Тем не менее, кажется, что их поиск достоин большего внимания. Ведь наличие каталога красиво уложенных графов типовых алгоритмов имело бы большое значение как для теории, так и для практики.

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