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

Тема 4.

 Основні поняття теорії паралельних обчислень


4.1 Понятие графа алгоритма и его свойства
4.2 Проблема отображения
4.3 Модели сетей передачи данных между процессорами
4.4. Концепция неограниченного параллелизма
4.4.1. Вычисление произведения элементов массива
4.4.2. Вычисление произведения матрицы на вектор
4.4.3. Недостатки концепции неограниченного параллелизма
4.5. Внутренний параллелизм
4.6 Эффективность параллельных вычислений
4.7 Представление алгоритма в виде диаграммы расписания

4.1. Понятие графа алгоритма и его свойства

Для описания информационных зависимостей алгоритмов решения задач широко


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

G = (V, E), (4.1)

где V = {1,...,|V|} – множество вершин графа, представляющих операции алгоритма,


E – множество дуг графа, устанавливающих частичный порядок операций.

Дуга Ei, j = (i, j) принадлежит графу только в том случае, если операция j использует
результат выполнения операции i. Модель является направленным графом.
Свойство ацикличности графа алгоритма состоит в том, что никакая величина не
может определяться через саму себя.
Если дугам графа приписать веса cij (i, j =1,…,N), отражающие интенсивность
информационного обмена между i-й и j- ветвями программы, такой граф называется
взвешенным направленным графом.
В общем случае граф алгоритма есть мультиграф, т.е. две вершины могут быть
связаны несколькими дугами. При этом в качестве разных аргументов одной операции
используется одна и та же величина.
Количество вершин графа (не считая вершин ввода) далее будем обозначать |V |.
Путь максимальной длины в графе называют критическим.

Для ориентированного ациклического графа с n вершинами существует число s<n ,


для которого все вершины графа можно так пометить одним из индексов 1,2,…,s, что
если дуга из вершины с индексом i идет в вершину с индексом j, то i<j.

Строгой параллельной формой графа называют граф, размеченный в соответствии


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

Строгая параллельная форма, в которой максимальная из длин путей,


оканчивающихся в вершине с индексом k, равна k -1, и все входные вершины находятся в
одной группе с индексом 1, называется канонической. Для заданного графа
каноническая форма единственна.
Группа вершин с одинаковыми индексами называется ярусом, число вершин в
группе – шириной яруса, а число ярусов – высотой параллельной формы.

Параллельная форма минимальной высоты называется максимальной, т.к. в каждом


ярусе такой формы максимальное число вершин.

Предположим теперь, что все операции алгоритма выполняются за одинаковое


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

На рис. 4.1 и 4.2 приведены примеры ориентированных графов, описывающих


алгоритмы нахождения суммы последовательности числовых значений

где n – количество суммируемых значений.

Рис. 4.1 Граф алгоритма последовательного Рис. 4.2 Граф алгоритма каскадного
суммирования суммирования

В частности, на рис. 4.1 показан ориентированный граф

алгоритма последовательного суммирования элементов числового набора.


Здесь – множество операций (ввода – v0,i и
суммирования – v1,i , ,а – множество
дуг, определяющих информационные зависимости операций.
В данном случае операции ввода обозначены цифрами 1-4, а операции
суммирования – цифрами 5-7. Нетрудно заметить, что этот граф является линейной
формой и не допускает параллельную реализацию на многопроцессорной системе.
Параллельная реализация алгоритма суммирования возможна, например, в случае,
когда алгоритм строится в виде каскадной схемы:
- на первой итерации каскадной схемы все исходные данные разбиваются на пары,
и для каждой пары вычисляется сумма их значений;
- полученные суммы также разбиваются на пары, и снова выполняется
суммирование значений пар и т.д.
Соответствующий ориентированный граф каскадной схемы приведен на рис. 4.2.
Он является одной из возможных строгих параллельных форм. Цифровые обозначения
операций здесь те же, что и на рис. 4.1.

4.2 Проблема отображения

Приведенный выше граф каскадного суммирования отражает лишь


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

где Vp - множество вершин, соответствующее операциям алгоритма, Ep -


множество дуг, представляющих информационные связи между ними, –
количество операций. Дугам графа приписываются веса , отражающие
интенсивность информационного обмена между i-й и j- вершинами (операциями).
Вычислительная система также представляется в виде графа

Здесь Ps - множество процессоров, Es - множество дуг, представляющих линии


связи между процессорами. Пропускная способность линий связи характеризуется весами
дуг графа

Задается критерий оптимальности отображения графа параллельной


задачи Gp(Vp ,Ep) на структуру вычислительной системы, заданной графом ,:

Если отображение представляется матрицей

где Xij =1, если и Xij = 0, ,


то критерий оптимальности отображения, при условии равной производительности всех
процессоров системы, имеет вид

В рамках общей проблемы отображения обычно решается одна из двух задач:


1. Для данной параллельной программы выбрать решающее поле.
2. Распределить ветви параллельной программы по процессорам компьютера
заданной архитектуры

4.3 Модели сетей передачи данных между процессорами

Для точного отображения алгоритма на архитектуру конкретной вычислительной


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

Полный граф (completely-connected graph) – между любой парой процессоров


существует линия связи. Такая топология обеспечивает минимальные затраты при
передаче данных, однако оказывается сложной при большом количестве процессоров.
Линейка (linear array или farm) – все процессоры перенумерованы по порядку и
каждый процессор, кроме первого и последнего, имеет линии связи только с двумя
соседними. Достоинство – простая реализация, однако класс задач, которым эта схема
соответствует, ограничен. Топология является подходящей для конвейерных вычислений.
Кольцо (ring) – получается из линейки процессоров соединением первого и
последнего процессоров линейки.
Звезда (star) – все процессоры имеют связь с одним (управляющим) процессором.
Топология эффективна для централизованной схемы вычислений.
Решетка (mesh) – граф связей образует (двух- или трехмерную) сетку. Топология
реализуется достаточно просто и может эффективно использоваться при решении
сеточных задач, описываемых уравнениями в частных производных.
Гиперкуб (hypercube) – частный случай решетки, когда по каждой размерности
сетки имеется только два процессора (при размерности N гиперкуб содержит 2 N
процессоров).
Гиперкуб обладает следующими свойствами:
- два процессора имеют соединение, если двоичные представления их номеров
имеют только одну различающуюся позицию;
- в N-мерном гиперкубе каждый процессор связан ровно с N соседями;
- N-мерный гиперкуб может быть разделен на два (N–1)-мерных гиперкуба (всего
возможно N таких разбиений);
- кратчайший путь между двумя любыми процессорами имеет длину, равную числу
различающихся битовых значений в двоичных номерах процессоров (в теории
информации это так называемое минимальное кодовое расстояние или расстояние
Хэмминга).

Основные характеристики топологии сети:


- диаметр – максимальное (по всем возможным парам) расстояние между двумя
процессорами сети, измеряемое по кратчайшему пути, эта величина обычно характеризует
максимально время, необходимое для передачи данных между процессорами;
- связность (connectivity) – характеризует наличие разных маршрутов передачи
данных между процессорами, показатель может быть определен, например, как
минимальное количество дуг, которое надо удалить для разделения сети передачи данных
на две несвязные области;
- стоимость – общее количество линий передачи данных в многопроцессорной
вычислительной системе.

4.4 Концепция неограниченного параллелизма


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

4.4.1. Вычисление произведения элементов массива

Пусть нужно вычислить произведение n чисел .


Рассмотрим случай n = 8. Тогда обычная схема, в которой реализуется
последовательный процесс вычислений, имеет следующий вид

Высота параллельной формы равна 7, ширина равна 1. Если вычислительная


система имеет больше одного процессора, то при данной схеме все они кроме одного
будут простаивать.
Следующая параллельная форма другого алгоритма вычисления произведения
использует процессоры более эффективно:
Высота параллельной формы равна 3, ширина равна 4. Существенное уменьшение
высоты обусловлено большей загрузкой процессоров выполнением полезной работы.
Соответствующие графы описанных алгоритмов представлены на рис. 4.4
(начальные вершины символизируют ввод данных).

Рис. 4.4. Последовательный граф и граф алгоритма сдваивания

Последняя схема очевидно распространяется на случай произвольного n. Для ее


реализации нужно на каждом ярусе выполнять максимально возможное количество
умножений пар чисел, полученных на предыдущем ярусе (не имеющих общих
множителей). В общем случае высота параллельной формы равна ,( означает
"ближайшее сверху" до целое число). Эта параллельная форма может быть

реализована на процессорах, причем степень загруженности процессоров


уменьшается от яруса к ярусу. Процесс построения элементов каждого яруса называется
процессом сдвоения.
При использовании процесса сдвоения можно строить алгоритмы
логарифмической высоты для вычисления значений произвольной ассоциативной
операции, например добавление векторов, умножение матриц и т.п.
Утверждение. Пусть функция существенно зависит от n аргументов и
изображается в виде суперпозиции конечного количества операций, каждая из которых
имеет не более p аргументов. Предположим, что значение функции вычисляется с
помощью некоторого алгоритма с использованием одних и тех же операций. Тогда если s
– высота алгоритма (без учета ввода данных), то .
Если некоторая задача имеет n входных данных, то можно в общем случае
рассчитывать на существование алгоритма ее решения с высотой не больше, чем .
Если удается разработать алгоритм высоты , где >0, то такой алгоритм можно
считать достаточно эффективным с точки зрения его реализации на параллельной
вычислительной системе.

4.4.2. Вычисление произведения матрицы на вектор

Пусть вектор вычисляется как произведение квадратной


матрицы и вектора , т.е.
Предположим, что вычислительная система имеет n2 процессоров. Тогда на первом
шаге можно параллельно вычислить все n2 произведений aij xj, а затем, с использованием
схемы сдвоения для сложения, в шагов вычислить параллельно все n сумм,
которые определяют координаты вектора y. То есть мы получили алгоритм вычисления
произведения квадратной матрицы и n-мерного вектора, который имеет ширину n2 и
высоту . При этом процессоры используются неравномерно. Все процессоры
задействованы только на первом шаге. Далее количество работающих процессоров
уменьшается вдвое на каждом шагу
Посредством аналогичных рассуждений строится параллельный алгоритм решения
задачи умножения двух квадратных матриц. Эту задачу можно свести к n задачам
умножения первой матрицы на последовательные столбцы второй матрицы. Если
использовать предыдущий алгоритм, получаем алгоритм, который имеет высоту порядка
log2 n и ширину n3 .
Следует обратить внимание на то, что в рассматриваемых параллельных версиях
алгоритмов умножения матриц и векторов возникает необходимость одновременной
отправки одних и тех же данных на разные процессоры. Такие операции нельзя проделать
очень быстро. Поэтому на практике процесс вычислений может существенно замедляться.

4.4.3. Недостатки концепции неограниченного параллелизма

При использовании концепции неограниченного параллелизма разработано


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

4.5. Внутренний параллелизм

В процессе длительного использования последовательных компьютеров накоплен


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

Параллелизм в алгоритме умножения матриц


Рассмотрим следующий пример. Пусть нужно вычислить произведение A=BC двух
квадратных матриц В и С порядка n. Согласно определению операции умножения матриц

Сами эти формулы не определяют алгоритм однозначно, поскольку не указан


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

Вновь явно указан параллелизм перебора индексов i, j. Однако по индексу k


параллелизма уже нет, так как этот индекс должен последовательно перебираться от 1 до
n (как это следует из формулы (7)).
Построим сейчас граф метода (7). При построении графа не будем учитывать
природу элементов матриц А, В и С (можно считать их элементами одного и того же
кольца). Вершины графа нельзя размещать произвольным образом. Подходящий способ
расположения подсказывает сам вид формул (7). Элементы графа будем размещать в
узлах прямоугольной решетки в трехмерном пространстве. Анализируя формулу (7)
нетрудно заметить, что на вершину с координатами (i, j, k ) будет передаваться результат
операции, которой соответствует вершина (i, j, k -1).
Граф алгоритма устроен достаточно просто. Он распадается на n2 не связанных
между собой подграфов. Каждый подграф содержит n вершин и представляет собой один
путь, расположенный параллельно оси k. Как и следовало ожидать, в графе отражен тот
же параллелизм, который был явно указам в записях (6) и (7). В случае n=2 граф приведен
на рис. 4.5, а.
Рис. 4.5. Граф алгоритму множення матриць

В полном графе имеется множественная рассылка данных. Элемент bik


рассылается по всем вершинам, имеющим те же самые значения координат i и k.
Элемент сkj рассылается по всем вершинам, имеющим те же самые координаты k и
j. Для п =2 эти рассылки показаны на рис. 4.5, 6. Все вершины соответствуют операциям
вида а + bc. Однако при k=1 они выполняются несколько иначе, чем при k1. Именно, в
этих случаях аргумент а не является результатом какой-либо операции, а всегда
полагается равным 0. Ничто не мешает 0 считать входным данным алгоритма и рассылать
его по всем вершинам при k=1.
Этот пример хорошо иллюстрирует, насколько важно правильно выбрать способ
расположения вершин графа алгоритма. Если, например, расположить вершины на
прямой линии, да еще без какой-либо связи с индексами i. j. k из (7) то вряд ли в таком
графе удалось бы разглядеть параллелизм. При выбранном расположении вершин
параллелизм очевиден. Более того, легко описать любой ярус любой параллельной формы.
Это есть множество вершин, не содержащее при фиксированных i и j более одной
вершины. Ярусы канонической параллельной формы представляют множество вершин,
лежащих на гиперплоскости k = const. Поэтому вполне естественно ожидать, что нам
придется связывать способ расположения вершин с системой индексов, используемых в
записи алгоритма. Данный пример такую зависимость уже наметил.

4.6. Эффективность параллельных вычислений

Практически сразу же после разработки первых параллельных программ возникает


необходимость определения времени выполнения вычислений для оценки достигаемого
ускорения процессов решения задач за счет использования параллелизма. Используемые
обычно средства для измерения времени работы программ зависят, как правило, от
аппаратной платформы, операционной системы, алгоритмического языка и т.п.
Для выполнения анализа эффективности необходимо иметь некоторый набор
критериев для оценки параллельного алгоритма.
Одним из важнейших понятий при анализе параллельных алгоритмов является
ускорение параллельного алгоритма. Ускорение Sp –это отношение времени вычислений
на одном процессоре ко времени вычислений на P процессорах:
Ускорение показывает, во сколько раз быстрее проходят вычисления в
параллельном режиме по сравнению с однопроцессорным режимом. В идеальном случае
ускорение на P процессорах равно P. В реальности ускорение обычно ниже из-за затрат
времени на обмен данными и другие операции.
Еще одним понятием при анализе параллельного алгоритма является
эффективность. Эффективность параллельных вычислений E это отношение полученного
ускорения к числу процессоров, а именно

4.7 Представление алгоритма в виде диаграммы расписания

Для удобства представления параллельных алгоритмов наряду с другими


способами используют также временные диаграммы выполнения операторов при
заданных значениях времени начала (окончания) их выполнения. В таких диаграммах,
операторы обозначаются прямоугольниками с длиной, равной времени выполнения
соответствующего оператора.
Для указания связей между прямоугольниками-операторами используются стрелки,
которые соответствуют дугам в графе алгоритма. Когда связей становится много, из-за
множества стрелок проследить эти связи становится трудно.
Для того чтобы диаграмма оставалась наглядной при любом количестве связей и
однозначно отражала расписание параллельного алгоритма введем следующие
дополнительные правила.
Ось ординат разобьем на интервалы, каждый из которых соответствует одному
из параллельно работающих процессоров. В каждом интервале будем размещать только те
прямоугольники операторы, которые закреплены за соответствующим этому интервалу
процессором.
Операторы на диаграмме будем обозначать в центре прямоугольников цифрой в
кружке, а связи между операторами – цифрами слева и справа от этого кружка. В левой
части прямоугольника-оператора будем записывать номера предшествующих по
информационной связи операторов, а в правой части – номера операторов, следующих за
данным оператором.
Поскольку каждый прямоугольник диаграммы размещается в интервале «своего»
процессора, описанный способ их нумерации отражает также связь между процессорами.
Поэтому этот способ представления является исчерпывающим наглядным представлением
расписания параллельного алгоритма и может быть удобным программисту для написания
параллельной программы.
При этом информация о номерах связанных операторов может использоваться для
оценки объема передаваемых данных как между процессами, так и между процессорами.

На рис. 4.6 приведен пример диаграммы расписания, составленной для


приведенного на рис. 4.2 параллельного алгоритма каскадного суммирования 4 чисел на
двух процессорах.
Рис. 4.6. Пример временной диаграммы алгоритма каскадного суммирования
четырех чисел

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