

Лекция 4
Характеристики параллельных вычислений
Степенью параллелизма численного алгоритма называется число его операций, которые можно выполнять параллельно.
Если, например, необходимо сложить два вектора размером n , то сложение его компонент не зависит друг от друга, и, следовательно, эти операции могут выполняться параллельно. Таким образом, степень параллелизма этого алгоритма равна n .
В данном случае мы не говорим о количестве процессоров, имеющихся в нашем распоряжении, но говорим о свойствах самого алгоритма. Для уточнения понятия степени параллелизма рассмотрим алгоритм сдваивания, который иногда называют алгоритмом логарифмического сдваивания.
Алгоритм логарифмического сдваивания
Пусть необходимо сложить n чисел a1 , a2 , …, an . На последовательной машине это обычно выполняется с помощью алгоритма S = a1; S = S +a2 , S = S +a3 и т.д. Этот после-
довательный алгоритм не содержит в себе параллельных операций.
Имея в распоряжении несколько процессоров, можно организовать сложение по алгоритму сдваивания, схема которого показана на рис. 1 для случая сложения 8 чисел.
Рис.4.1 – Алгоритм логарифмического сдваивания
В общем случае, если n = 2q и q – целое число, то алгоритм состоит из q =log n эта-
пов. На первом этапе параллельно выполняются n2 сложений, на втором - n4 и т.д. Получа-
ется, что на каждом этапе степень параллелизма разная. Поэтому можно записать степень параллелизма в виде среднего:
1 |
n |
|
n |
|
n |
|
|
2q −1 |
|
n −1 |
|
|
n −1 |
|
|
n |
|
|
|||||
|
|
+ |
|
+ |
|
+L |
= |
|
|
|
= |
|
|
|
|
= |
|
|
=O |
|
|
, |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||
q |
2 |
|
4 8 |
|
|
|
q |
|
|
|
q |
|
|
log n |
|
|
|
|
|
||||
|
|
|
n |
|
n-1 |
|
log n |
|
|||||||||||||||
где O – символ Ландау, т.е. при n → ∞ |
|
|
/ |
|
|
→1. |
|
|
|
|
|||||||||||||
|
log n |
log n |
|
|
|
|
|||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Для оценки степени параллелизма подобных алгоритмов вводится понятие средней степени параллелизма.
Средней степенью параллелизма алгоритма называется отношение общего числа операций алгоритма к числу его этапов.
Если подсчитать, степень параллелизма у обычного алгоритма суммирования, то он равен единице. Действительно, для сложения n чисел необходимо выполнить n −1 операций, а число этапов также равно n −1.

2
Отметим также, что с помощью рассмотренного алгоритма логарифмического сдваивания можно не только суммировать, но выполнять множество других операций: умножение, логические операции, операции сравнения.
Ускорение параллельного алгоритма
Ускорением параллельного алгоритма называется отношение времени выполнения алгоритма на одном процессоре к времени выполнения алгоритма на p -процессорной системе:
T
Sp = Tp .
Видеальном случае Tp = Tp1 , тогда S p max = p , т.е. максимально возможное ускорение не1
может превышать число процессоров, участвующих в параллельном вычислении.
Под временем выполнения подразумевается реальное время, т.е. время учитывающее подготовку данных, пересылки и т.п. В алгоритме сдваивания помимо операций суммирования необходимо пересылать данные между процессорами.
Пусть для операции сложения необходимо время t , а для пересылки числа - αt , где α - некоторое положительное число, тогда для алгоритма сдваивания:
|
|
|
T1 |
|
(n −1) t |
|
|
1 |
|
|
n −1 |
|
S |
|
= |
= |
= |
|
|
|
. |
||||
|
|
t log n +t α log n |
(1 |
+α) |
|
|||||||
|
p |
|
Tp |
|
log n |
|
Таким образом, для алгоритма сдваивания ускорение это - средняя степень параллелизма, деленная на 1+α. Если α =0 , то ускорение максимально, а если α =1, то ускорение
падает в 2 раза. Например, если имеется число процессоров p = n |
, то формула запишется: |
|||||||||
|
|
|
|
|
|
|
|
2 |
|
|
S p |
= |
|
|
1 |
|
|
|
2 p −1 |
. |
|
1 |
+α |
1 |
|
|
||||||
|
|
|
+log p |
|
Ускорение позволяет сравнить поведение некоторого алгоритма для однопроцессорной и многопроцессорной системах. Недостаток этой меры заключается в том, что мы сравниваем одинаковые алгоритмы, выполненные на этих вычислительных системах. Но не всегда такое сравнение корректно. Действительно, существуют алгоритмы, которые лучше выполняются на последовательных, и наоборот, алгоритмы, которые эффективны для параллельных систем. Поэтому иногда пользуются характеристикой, которая называется ускорением параллельного алгоритма по сравнению с наилучшим последовательным:
S 'p = T1н , Tp
где T1н – время выполнения наилучшего последовательного алгоритма на последовательной
машине.
Наряду с понятием ускорения параллельного алгоритма вводят характеристику, называемую эффективностью параллельного алгоритма.
Эффективностью параллельного алгоритма называется отношение:
E p = Spp .
Эффективностью параллельного алгоритма по отношению к наилучшему последовательному алгоритму:
E'p = S 'p . p
Т.к. максимальное значение ускорения алгоритма равно числу процессоров в параллельной системе, то справедливы следующие соотношения:
Высокопроизводительные вычислительные системы и параллельное программирование. Кудерметов Р.К.

3
S p ≤ p , S 'p ≤ S p , E' ≤ E ≤1 .
Таким образом, эффективность параллельного алгоритма в идеальном случае может равняться 1. Понятно, что максимальную эффективность, равную 1, достигнуть не всегда возможно ввиду таких факторов как отсутствие максимального параллелизма на всех этапах решения задачи (например, в алгоритме логарифмического сдваивания), конфликты при обращении к общей памяти, наличие критических участков алгоритма, где возможна только последовательная обработка данных и т.п. Все названные факторы иногда называют затратами на подготовку данных и вводят понятие время подготовки данных – т.е. задержка, вызванная обменами, конфликтами, загрузкой данных из памяти и размещение их в нужные регистры.
Вбольшинстве случаев параллельные программы представляют собой смесь фрагментов с различными степенями параллелизма: максимальной, частичной и минимальной.
Втеории и практике параллельных вычислений часто употребляют термин балансировки нагрузки, под которым понимают распределение заданий между процессорами с целью получения максимальной загрузки процессоров параллельной вычислительной системы.
Балансировка нагрузки может быть статической, когда задания процессорным элементам планируются до начала решения задачи, и динамической, если задания и данные распределяются в ходе решения. Понятно, последняя может оказаться чрезвычайно сложной задачей оптимизации и требовать больших затрат времени, в результате чего даже потерять всякий смысл.
Формальная модель ускорения
В связи с выше изложенным рассмотрим модель ускорения для параллельной вычислительной системы в виде, который называют формальной моделью ускорения:
S p = (α1 +α2 / k +T1α3 / p)T1 +td ,
где T1 – время решения всей задачи на одном процессоре;
α1 – доля операций, выполняемая для данного алгоритма на одном процессоре;
α2 – доля операций, выполняющихся на k процессорах, т.е. с некоторой средней степенью параллелизма;
α3 – доля операций, выполняющихся с максимальной степенью параллелизма, равной p ;
td – общее время, необходимое для подготовки данных в течение всего процесса решения
задачи.
Рассмотрим три возможных случая для формальной модели ускорения:
1) |
α1 = α2 = 0 , |
α3 =1, |
td =0 . В этом случае ускорение максимально: S p = p , |
т.е. |
|
затраты на подготовку данных отсутствуют и задача идеально распараллелена; |
|
||
2) |
α1 = α3 = 0 , |
α2 =1, |
td =0 . В этом случае алгоритм выполняется с ускорением |
Sp = k < p ;
3)α2 = 0 , td =0 . Введем обозначение α = α1 , тогда α3 =1−α. В этом случае получим формальную модель ускорения в виде, выражающем закон Амдала (Amdahl):
S p = |
|
1 |
. |
|
α+(1 |
−α) / p |
|||
|
|
Этот случай соответствует процессу, в котором вычисления производятся либо с максимальным параллелизмом, либо с минимальным. Пусть, например, α =12 (т.е. половина
всех вычислений выполняется на последовательно, а другая половина – идеально распарал-
Высокопроизводительные вычислительные системы и параллельное программирование. Кудерметов Р.К.

4
лелена), тогда, очевидно, S p < 2 . Таким образом, даже при отсутствии затрат на обмены и
конфликты, ускорение меньше двух.
Рассмотрим график функции ускорения, выраженной законом Амдаля при различных значениях α, приняв, для определенности, число процессоров в системе p =100 (рис 2). Из
графика можно сделать вывод, что даже, если только 1% операций выполняется последовательно, т.е. на одном процессоре, то ускорение уменьшается с 100 до 50.
Рис 4.2 – К закону Амдала
Возможен еще четвертый случай, когда td велико. Этот случай демонстрирует, что возможна ситуация, при которой при любых αi , k и p ускорение S p <1, т.е. параллельный
алгоритм будет работать дольше, чем последовательный и, следовательно, вообще непригоден. Отсюда можно сделать вывод: в задаче может существовать некоторый предел параллелизма, то есть дальнейшее увеличение числа процессоров может привести к замедлению решения.
Рассмотренные характеристики алгоритмов касались параллельных компьютеров. По аналогии эти характеристики можно распространить на векторные компьютеры.
Степень векторизации – это длина используемых в вычислениях векторов. Если на разных этапах вычислений длины векторов различны, то их средняя длина – средняя степень векторизации.
Обратим внимание, степень параллелизма может не совпадать со степенью векторизации. Например, если необходимо вычислить n функций f1(x) , f2 (x) ,…, fn (x) , то степень
параллелизма может быть максимальной, то есть равной n , или меньше в случае, если время на вычисление каждой из этих функций отличается друг от друга. О степени векторизации мы здесь не говорим, так как мы не затрагиваем характер этих функций. Если все функции одинаковы (одна) и необходимо вычислить их значения в n точках аргумента x , то степень векторизации может достигнуть значения n .
Ускорение векторного вычисления – это отношение времени выполнения алгоритма на скалярном процессоре к времени выполнения этого алгоритма на векторном процессоре.
Имеется также понятие ускорения векторного вычисления по сравнению с временем выполнения быстрейшего последовательного алгоритма на последовательном компьютере.
Для векторных вычислений так же можно рассматривать формальную модель ускорения и по аналогии с максимальным параллелизмом можно говорить об оптимальной векторизации, то есть случае, когда длины векторов позволяют максимально использовать производительность векторного процессора. Аналогом минимального параллелизма в векторных вычислениях соответствует случай скалярной обработки векторов.
Известны параллельные и векторные алгоритмы, которые при умеренных значениях параллелизма и векторизации превосходят по времени выполнения соответствующие ска-
Высокопроизводительные вычислительные системы и параллельное программирование. Кудерметов Р.К.
5
лярные алгоритмы, однако при более высоких значениях векторов или параллелизма скалярные алгоритмы по затратам времени превосходят их. Поэтому вводят ещё определение:
Говорят, что векторный алгоритм, решающий задачу порядка n согласован с наилучшим последовательным алгоритмом, если отношение Cv (n)Cs (n) остаётся ограниченным
при n →∞, где Cv – число арифметических операций для векторного (параллельного) алгоритма, Cs – число операций для скалярного (последовательного) алгоритма. Если это отно-
шение стремится к бесконечному значению при n →∞, то алгоритм называется несогласованным.
Суммирование методом рекурсивного удвоения
Рассмотрим снова задачу суммирования n чисел. Предположим, что нам необходимо получить не только окончательную сумму n чисел, но и все частичные суммы:
S11 = a1;
S12 = a1 + a2 = S11 + a2 ;
L
S1,n = a1 +K+ an = S1,n−1 + an .
Будем далее придерживаться такого обозначения: Sij = ai +L+a j . Решение задачи заключается в нахождении всех Sij . Для иллюстрации метода рассмотрим пример сложения восьми чисел:
a |
|
|
|
|
|
S |
|
|
|
|
|
|
S |
|
|
|
|
S |
|
|||
|
1 |
|
|
|
|
|
|
11 |
|
|
|
|
|
|
|
11 |
|
|
|
|
11 |
|
a2 |
|
a1 |
|
S12 |
|
|
|
|
|
S12 |
|
|
|
|
S12 |
|
||||||
a |
3 |
|
a |
2 |
|
S |
23 |
|
S |
|
|
S |
|
|
|
|
S |
|
||||
a |
|
a |
|
S |
|
S |
11 |
|
|
S |
13 |
|
|
|
|
13 |
|
|||||
4 |
3 |
34 |
|
|
|
|
S |
|||||||||||||||
|
|
|
|
|
|
|
12 |
|
|
|
14 |
|
|
|
|
14 |
|
|||||
a |
|
|
+ a |
|
|
= S |
|
|
+ S |
|
|
= S |
|
|
+ S |
|
= S |
|
||||
|
5 |
|
|
4 |
|
|
|
45 |
|
|
23 |
|
|
|
|
25 |
|
|
11 |
|
15 |
|
a6 |
|
a5 |
|
S56 |
|
S34 |
|
|
S36 |
|
S12 |
S16 |
|
|||||||||
a |
7 |
|
a |
6 |
|
S |
67 |
|
S |
45 |
|
|
S |
47 |
|
S |
|
S |
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
13 |
|
17 |
|
|||||
a |
8 |
|
a |
7 |
|
S |
78 |
|
S |
56 |
|
|
S |
58 |
|
S |
|
S |
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
14 |
|
18 |
|
|||||
На нулевом этапе алгоритма получается одна частичная сумма S11 = a1 . После первого |
||||||||||||||||||||||
сложения у нас имеются две частичные суммы S11 |
и S12 , |
а также несколько промежуточ- |
ных сумм S23 , S34 … Второе сложение порождает ещё две суммы S13 и S14 , а также ещё
несколько промежуточных сумм. Таким образом, в результате двух векторных операций получаются четыре искомые частичные суммы: S11 , S12 , S13 , S14 . И, наконец, после
третьего суммирования мы получим все частичные суммы: S11 … S18 . Этот алгоритм
называется суммированием методом рекурсивного удвоения.
Проведём анализ проведённых вычислений. Первая векторная операция состоит из семи скалярных сложений, вторая – из шести; третья – из четырёх. Если количество слагаемых
n = 2k , то процесс состоит из k этапов, т.е. k = log n , причём вектора состоят из n −2i эле-
ментов, где i = 0,..., k −1. Сдвиг производится на каждом этапе на 2i . Средняя длина векторов при сложении равна:
Высокопроизводительные вычислительные системы и параллельное программирование. Кудерметов Р.К.

|
|
|
|
|
6 |
|
k −1 |
1 |
|
|
1 |
|
|
1 ∑(n −2i ) = |
(kn −2k +1) = |
[n (log n −1) +1] |
||||
|
|
|||||
k i =0 |
k |
|
|
log n |
|
|
Таким образом, для получения всех S1 j |
сумм необходимо выполнить log n векторных |
сложений со средней длиной векторов
n(log n −1) +1 . log n
Всего операций сложения в этом алгоритме n log n − n +1, а при выполнении на ска-
лярном процессоре n −1. Отношение |
n log n −n +1 |
стремится к бесконечности при неогра- |
||
n −1 |
|
|||
|
|
ниченном возрастании n. Поэтому данный алгоритм представляет собой пример несогласованного алгоритма. Однако он может оказаться очень полезным. Рассмотрим некоторые условия его выполнения.
Предположим, что векторный компьютер производит векторное сложение векторов длиной n за время T = S + τn , где S – время запуска процессора на сложение, τ – такт выполнения элементарных подопераций. Тогда время вычисления n −1 суммы S1 j ,
j = 2,..., n , по алгоритму рекурсивного удвоения при n = 2k , будет:
k −1
Tv = ∑[S +τ(n −2i )] = kS +τ(kn −2k +1) = S log n +τ(n log n −n +1)
i =0
Пусть µ - затраты времени на операцию сложения на скалярном процессоре, тогда общее время на сложение n чисел будет равно Ts = µ(n −1). Если предположить, что
S=1000 нс, τ=10 нс, µ=200 нс, то вычисления показывают:
n |
Tv |
Ts |
8 |
3170 |
1400 |
16 |
4.5*103 |
3*103 |
32 |
6.3*103 |
6.2*103 |
64 |
9.2*103 |
12.6*103 |
29 |
25.9*103 |
51*103 |
220 |
200*106 |
210*106 |
221 |
881*106 |
839*106 |
Согласно таблице, скалярный алгоритм эффективней векторного при малых значениях векторов, что объясняется доминированием времени запуска в векторных операциях. В диапазоне больших длин векторов, но всё ещё реальных – эффективнее векторное сложение по методу рекурсивного удвоения. Далее, снова скалярный алгоритм становится эффективнее, т.к. при векторных вычислениях в формуле (2) член n log n начинает доминировать.
Таким образом, отношение
Cv |
= |
n(log n −1) |
→∞, при n →∞ |
|
Cs |
n −1 |
|||
|
|
где Cv – общее число арифметических операций для векторного алгоритма; Cs - общее число арифметических операций для последовательного алгоритма;
Следовательно, согласно данному выше определению алгоритм рекурсивного удвоения можно отнести к несогласованному.
Высокопроизводительные вычислительные системы и параллельное программирование. Кудерметов Р.К.