Upload
michael-karpov
View
1.557
Download
5
Embed Size (px)
Citation preview
МОЛОДЕЖНАЯ ШКОЛА«Суперкомпьютерные технологии
в науке, промышленности и образовании»
ННГУ им. Н.И. Лобачевского, Нижний Новгород, 26-31 октября 2009 г.
КОНСОРЦИУМ УНИВЕРСИТЕТОВ РОССИИ
Курс: Введение в параллельные алгоритмы
Якобовский Михаил Владимировичд.ф.-м.н., зав. сектором, Институт математического моделирования РАН, Москва
Всероссийская школа «Суперкомпьютерные технологии в образовании, науке и промышленности»
Содержание
• Введение• Постановка проблемы• Основные понятия• Базовые методы• Сумма ряда• Параллельная сортировка • Выводы• Контрольные вопросы• Литература
2 из N
Всероссийская школа «Суперкомпьютерные технологии в образовании, науке и промышленности»
Постановка проблемы• Вычислительная мощность суперкомпьютеров быстро растет• Примеров успешного полноценного использования
суперкомпьютеров мало• В среднем вычислительная мощность суперкомпьютеров
используется не более, чем на несколько процентов
• Необходима разработка алгоритмической и программной базы, создание которой возможно исключительно на основе тесного взаимодействия специалистов прикладных областей и специалистов в области создания параллельных приложений
3 из N
Введение
• Курс знакомит с некоторыми принципами разработки параллельных алгоритмов. Из всего многообразия причин, побуждающих к использованию суперкомпьютеров, в рамках курса рассматриваются только две:– сокращение времени решения прикладных
задач– обеспечение возможности решения больших
задач за заданное время
4
Кризис эффективности
• Вычислительная мощность суперкомпьютеров велика, но: – Она образована суммой мощностей множества
исполнительных устройств• На протяжении ряда лет увеличение
производительность компьютера автоматически означало снижение времени работы существующих программ. Теперь это не так:– Последовательные программы не могут
работать на многопроцессорных системах быстрее, чем на последовательных
5
Кризис эффективности
• Время вычислительных систем, обладающих существенной производительностью и имеющих в своем составе только один процессор прошло
• Автоматическое преобразование последовательных программ в параллельные невозможно
• Необходимо знать существующие и развивать новые методы решения задач на многопроцессорных системах
6
Уточнение круга рассматриваемых систем
• Системы на основе объединенных сетью типовых вычислительных узлов – системы с распределенной оперативной памятью
• Системы с доступом всех процессоров к общей оперативной памяти
• Графические ускорители• ПЛИС• Нейрокомпьютеры• Другие …
7
Многопроцессорные системы с распределенной памятью
Процессор 1 Процессор 2 Процессор 3
ЛокальнаяПамять 1
ЛокальнаяПамять 2
ЛокальнаяПамять 3
Router2
Router1
P-Nodes
IO-Nodes
Network концентраторы
Процессорные узлы
8
Многопроцессорные системы с общей памятью
Процессор 1 Процессор 2 Процессор 3
Общая оперативная память
9
Гибридные вычислительные системы
10
Процессор 1 Процессор 2 Процессор 3
Общая оперативная память
Процессор 7
Процессор 8
Процессор 9
Общая оперативная память
Процессор 4
Процессор 5
Процессор 6
Общая оперативная память
сеть
Уточнение круга рассматриваемых алгоритмов
• Слабо взаимодействующие последовательные процессы
11
• При запуске указываем число требуемых процессоров Np и название программы
• На выделенных для расчета узлах запускается Np копий указанной программы
– Например, на двух узлах запущены три копии программы. Копия программы с номером 1 не имеет непосредственного доступа к оперативной памяти копий 0 и 2:
• Каждая копия программы получает два значения: – Np– rank из диапазона [0 … Np-1]
• Любые две копии программы могут непосредственно обмениваться данными с помощью функций передачи сообщений
Модель программы на распределенной памяти
0 1 2
12
• Работа начинается с запуска одной программы• При необходимости программа порождает новые процессы,
эти процессы:– Обладают собственными локальными переменными– Имеют доступ к общим глобальным переменнымint a_global; main нить1 нить2main(){int b1_local; запуск нити1} запуск нити2 fun()
{int b2_local; ожидание} окончания работы
Модель программы на общей памяти
13
Свойства канала передачи данныхT(n)=n*Tбайта+ Tлатентности
Число передаваемых байт
Infiniband
14
• Синхронный методSend(адрес данных, размер, номер процессора)Recv(адрес данных, размер, номер процессора)
• Асинхронные методы– НебуферизованныйASend(адрес данных, размер, номер процессора)ARecv(адрес данных, размер, номер процессора)ASync
– БуферизованныйABSend(адрес данных, размер, номер процессора)
Методы передачи данных
15
• A=3• Send(&A)• A=5
Синхронный
B=4 Recv(&B) Print(B)
SendRecv
Print(B)A=5
B=4A=3
Результат3
16
• A=3• АSend(&A)• A=5
Асинхронные
B=4 АRecv(&B) Print(B)
Send
ASend
Recv
ARecv
Print(B)A=5
B=4
Результат 3 ? 4 ? 5
A=3
17
• A=3• АSend(&A)• Async()• A=5
Асинхронные B=4 АRecv(&B) Print(B)
ASync
Send
ASend
Recv
ARecv
Print(B)
A=5
B=4
Результат 3 ? 4
A=3
18
• A=3• АSend(&A)• Async()• A=5
Асинхронные B=4 АRecv(&B) Async() Print(B)
Результат
3
ASync
SendASend
ASyncRecv
ARecv
Print(B)A=5
A=3B=4
19
• A=3• АBSend(&A)• A=5
Асинхронные буферизованные
B=4 АRecv(&B) Async() Print(B)
Результат 3
Send(&buf)
ABSend
ASyncRecv
ARecv
Print(B)
A=5
buf=A
A=3
B=4
20
• Целочисленная неотрицательная переменная • Две атомарные операции, не считая
инициализации• V(S)
– Увеличивает значение S на 1
• P(S)– Если S положительно, уменьшает S на 1– Иначе ждет, пока S не станет больше 0
Семафор
Языки програмирования. Редактор Ф.Женюи. Перевод с англ В.П.Кузнецова. Под ред. В.М.Курочкина. М:."Мир", 1972 Э. Дейкстра. Взаимодействие последовательных процессов.
http://khpi-iip.mipk.kharkiv.edu/library/extent/dijkstra/ewd123/index.html 21
ускорениепараллельного
алгоритма
S(p)=T(1)/T(p)
Ускорение и эффективность параллельных алгоритмов
Ускорение параллельного алгоритма относительно
наилучшего последовательного
S*(p)=T * /T(p)E *(p)=S *(p)/p
эффективностьиспользования
процессорной мощности
E(p)=S(p)/p
22
• Да, если:– Сравниваем с плохим последовательным
алгоритмом– Аппаратные особенности вычислительной
системы косвенно влияют на эффективную скорость обработки данных
Может ли быть S(p)>p ?
23
• Да– Если первый алгоритм позволяет использовать
больше процессоров, чем второй.
• Самый эффективный алгоритм – использующий один (1) процессор. – Его эффективность по определению равна
100%, но он не всегда самый быстрый.
Может ли неэффективный алгоритм работать быстрее эффективного?
24
• Все элементарные операции (+ - * / ) выполняются за время с
• Все операции выполняются точно, результат не зависит от порядка их выполнения
Определить сумму конечного ряда
25
S=1;a=1;for(i=1;i<= n;i++){
a=a*x/i;S=S+a;
}
Последовательный алгоритм
T1= 3nс
26
Параллельный алгоритм
• Вычислить для всех i =1,…,n : xi
• Вычислить для всех i =1,…,n : i!
• Вычислить для всех i =1,…,n : ai =
• Вычислить сумму всех членов ai
27
Для вычисления xi воспользуемся методом бинарного умножения
x
1 x2
2 x3 x4
3 x5 x6 x7 x8
4 x9 x10 x11 x12 x13 x14 x15 x16
xi
28
Для вычисления i! воспользуемсяаналогичным методом
4 12 34 56 78910 1112 1314 1516=16!
3 12 34 56 78 910 1112 1314 1516
2 12 34 56 78 910 1112 1314 1516
1 12 34 56 78 910 1112 1314 1516
16!
29
Для вычисления i! воспользуемсяаналогичным методом
4 12 34 56 78910 1112 =12!
3 12 34 56 78 910 1112 1314 1516
2 12 34 56 78 910 1112 1314 1516
1 12 34 56 78 910 1112 1314 1516
12!
30
Для вычисления i! воспользуемсяаналогичным методом
4 12 34 56 78910 1112 1314=14!
3 12 34 56 78 910 1112 1314
2 12 34 56 78 910 1112
1 12 34 56 78 910 1112 1314 1516
14!
31
Параллельный алгоритм
• Вычислить все xi :
• Вычислить все i! :• Вычислить все ai : - надо n процессоров
• Вычислить сумму всех ai :
a1 a2 a3 a4 a5 a6 a7 a8 a1+a2 a3+a4 a5+a6 a7+a8
a1+a2+a3+a4 a5+a6+a7+a8
a1+a2+a3+a4+a5+a6+a7+a8
2
32
p=n
Ускорение и эффективность при p=n
21.5
1.5
33
Методы построения параллельных алгоритмов
… если для нас представляют интерес реально работающие системы, то требуется убедиться, (и убедить всех сомневающихся) в корректности наших построений
… системе часто придется работать в невоспроизводимых обстоятельствах, и мы едва ли можем ожидать сколько-нибудь серьезной помощи от тестов
Dijkstra E.W.1966
34
• Методы построения параллельных алгоритмов и их свойства:– Статическая балансировка
• метод сдваивания• геометрический параллелизм• конвейерный параллелизм
– Динамическая балансировка• коллективное решение• диффузная балансировка загрузки
Огласите весь список, пожалуйста! «Напарник», Леонид Гайдай
35
• Обладает запасом внутреннего параллелизма– Есть возможность одновременного выполнения
операций
• Допускает возможность равномерного распределения вычислительных операций между процессорами
• Обладает низким уровнем накладных расходов
Хороший параллельный алгоритм
большим
большим числом
36
• Операции, отсутствующие в наилучшем последовательном алгоритме:– Синхронизация– Обмен данными– Дублирование операций– Новые операции
Накладные расходы
37
• Потери времени на передачу данных между процессами
Процессор 1 Процессор 2
Обмен данными
38
• Потери времени на ожидание долго выполняющихся процессов Процессор 1 Процессор 2 Процессор 3
Синхронизация
39
S=0;For(i=0;i<n1;i++) S+=a[i];Send(S)
Дублирование операций
S=0;For(i=n1;i<n;i++) S+=a[i];Send(S)
Recv(S1)Recv(S2)S=S1+S2
40
127
)8(
437
log1
log)(
4
482
22/
nE
pn
nS
nnT
p
pn
cnp
Шаг Процессор 1 Процессор 2 Процессор 3 Процессор 4
1 12 34 56 78
2 123 1234 567 5678
3 12345 123456 1234567 12345678
Новые операции
F=1;
for(i=2;i <= n;i++)
F*=i;
)1()(1 nnT c
Вычисление всех факториалов до 8! включительно
41
127
)8(437
log1
log)( 4
482
22/
nEpn
nSnnT p
pn
cnp
Шаг Процессор 1 Процессор 2 Процессор 3 Процессор 4
1 12 34 56 78
2 123 1234 567 5678
3 12345 123456 1234567 12345678
Новые операции
Шаг Процессор 1 Процессор 2 Процессор 3 Процессор 4
1 2! 34 56 78
2 3! 4! 567 5678
3 5! 6! 7! 8!
1
2
4
3
8
5
9
11
6 7
12
10
42
• Каскадная схема
• Модифицированная каскадная схема
Метод сдваивания
a1 a2 a3 a4 a5 a6 a7 a8 a1+a2 a3+a4 a5+a6 a7+a8
a1+a2+a3+a4 a5+a6+a7+a8
a1+a2+a3+a4+a5+a6+a7+a8
n
nEn
nnS
nnT
npnp
cnp
22/
22/
22/
log1
)(log
1)(
log)(
21
)(log2
1)(
log2)(
22
2
log2log
2
log
nEn
nnS
nnT
n
np
n
np
c
n
np
X 2 X
1 0 X 1 X
9 X 3 X
1 1 X 4 X
1 2 X 5 X
1 3 X 6 X
1 4 X 7 X
1 5 X 8 X
1 6
1
2
43
Стена Фокса
n – ширина стенык – высота стены
44
Одномерная разностная схема для уравнения диффузии
hNN
DNN
NN
nih
NNND
NNxN
DN
nnnn
iiiii
t
1
00
211
2
2
1,,1,2
1,,1,212 niNNNhD
NN iiiii
45
Решение одномерного уравнения на 9 моментов времени
0.0000
0.2000
0.4000
0.6000
0.8000
1.0000
1.2000
1 2 3 4 5 6 7 8 9 10 11
Ряд1
Ряд2
Ряд3
Ряд4
Ряд5
Ряд6
Ряд7
Ряд8
Ряд9
46
Метод геометрического параллелизма
c
sp
c
sp
scpc
np
knE
np
pknS
kp
knknTknknT
41
1)(
41
1)(
4)()(1
47
А почему?
for(шаг=0;шаг<k;шаг++)
{for(кирпич=rank*n/p;кирпич<(rank+1)*n/p;кирпич++)
Уложить(кирпич)
if(rank>0) Send(rank-1, кирпич уложен! )
if(rank<p-1) Send(rank+1, кирпич уложен! )
if(rank>0) Recv(rank-1, место готово? )
if(rank<p-1) Recv(rank+1, место готово? )
}
scp kp
knknT 4)(
48
?
0 1 2 3 4 5
=<
>==<
>==<
>==<
>==<
>=
scp kp
knknT 4)(
for(шаг=0;шаг<k;шаг++)
{for(кирпич=rank*n/p;кирпич<(rank+1)*n/p;кирпич++)
Уложить(кирпич)
if(rank>0) Send(rank-1, кирпич уложен! )
if(rank<p-1) Send(rank+1, кирпич уложен! )
if(rank>0) Recv(rank-1, место готово? )
if(rank<p-1) Recv(rank+1, место готово? )
}
49
?
0 1 2 3 4 5
=<
>==<
>==<
>==<
>==<
>=
scp kp
knknT 4)(
for(шаг=0;шаг<k;шаг++)
{for(кирпич=rank*n/p;кирпич<(rank+1)*n/p;кирпич++)
Уложить(кирпич)
if(rank>0) Send(rank-1, кирпич уложен! )
if(rank<p-1) Send(rank+1, кирпич уложен! )
if(rank>0) Recv(rank-1, место готово? )
if(rank<p-1) Recv(rank+1, место готово? )
}
50
?
0 1 2 3 4 5
=<
=<>=
=<>=
=<>=
=<>=
>=
scp kp
knknT 4)(
for(шаг=0;шаг<k;шаг++)
{for(кирпич=rank*n/p;кирпич<(rank+1)*n/p;кирпич++)
Уложить(кирпич)
if(rank>0) Send(rank-1, кирпич уложен! )
if(rank<p-1) Recv(rank+1, место готово? )
if(rank<p-1) Send(rank+1, кирпич уложен! )
if(rank>0) Recv(rank-1, место готово? )
}
51
?scp kp
knknT 4)(
0 1 2 3 4 5
=<
=<>=
=<>=
=<>=
=<>=
>=
52
!scp kp
knknT 1)(
0 1 2 3 4 5
=<
=<>=
=<>=
=<>=
=<>=
>=
53
!scp kp
knknT 2)(
0 1 2 3 4 5
=<
=<>=
=<>=
=<>=
=<>=
>=
54
!scp kp
knknT 3)(
0 1 2 3 4 5
=<
=<
>=
=<>=
=<>=
=<>=
>=
55
!scp kp
knknT 4)(
0 1 2 3 4 5
=<
=<
>=
=<
>=
=<>=
=<>=
>=
56
!scp pkp
knknT )(
0 1 2 3 4 5
=<
=<
>=
=<
>=
=<
>=
=<>=
>=
57
!scp kpp
knknT )1()(
0 1 2 3 4 5
=<
=<
>=
=<
>=
=<
>=
=<>=
>=
58
!0 1 2 3 4 5
=<
=<
>=
=<
>=
=<
>=
=<>=
>=
scp kpp
knknT )2()(
59
!0 1 2 3 4 5
=<
=<
>=
=<
>=
=<
>=
=<>=
>=
scp kpp
knknT )3()(
60
!0 1 2 3 4 5
=<
=<
>=
=<
>=
=<
>=
=<>=
>=
scp kpp
knknT )4()(
61
!0 1 2 3 4 5
=<
=<
>=
=<
>=
=<
>=
=<>=
>=
scp pkp
knknT 2)(
62
!0 1 2 3 4 5
=<
>==<
=<>=
>==<
=<>=
>=
scp pkp
knknT 4)(
63
!for(шаг=0;шаг<k;шаг++)
{
for(кирпич=rank*n/p;кирпич<(rank+1)*n/p;кирпич++)
Уложить(кирпич)
if(rank%2)
{
if(rank>0) Send(rank-1, кирпич уложен! )
if(rank>0) Recv(rank-1, место готово? )
if(rank<p-1) Recv(rank+1, место готово? )
if(rank<p-1) Send(rank+1, кирпич уложен! )
}
else
{
if(rank<p-1) Recv(rank+1, место готово? )
if(rank<p-1) Send(rank+1, кирпич уложен! )
if(rank>0) Send(rank-1, кирпич уложен! )
if(rank>0) Recv(rank-1, место готово? )
}
}
scp kp
knknT 4)(
64
Метод коллективного решения (укладка паркета)
scp pN
T
s
cpmax
s
c
65
Метод коллективного решения (укладка паркета)
c
sr
p
s
cs
cr
p
scp
c
r
knE
p
pr
rknS
rrpkn
knT
knknT
s
c
s
c
1
1)(
11
1
1
1)(
)(
)(
max
max
2
1
s
crp
max
Число порций
Обработка порции
Обмен данными
r – размер порции
66
s
crp
max
r – размер порции
Как правильно?
s
c
s
c
rr
p
max
или
Зависит ли время передачи данных от размера порции (задания)?
67
Send(ai); Send(ai+1); Recv(s);
Вычисление определенного интеграла
i
a
a
B
A
i
i
dxxfdxxfI1
ii
spT max
1 2ai ai+1
68
Метод конвейерного параллелизма
?)()(1 p
knknTknknT cpc
?Время выполнения на p процессорах
69
Метод конвейерного параллелизма
c
sp
c
sp
scpc
knEpknS
pn
kp
knknTknknT
1
1)(
1
1)(
)()(1
70
При статической балансировке возможен дисбаланс загрузки процессоров
• Причины дисбаланса– Разные процессоры– Внешнее воздействие– Разная вычислительная сложность заданий
• Результат дисбаланса– Эффективная производительность определяется самым
медленным процессором
Диффузная балансировка
71
Стена Фокса
Какой объем работ забрать у среднего процессора и кому его передать?
72
Метод геометрического параллелизма
73
Метод геометрического параллелизма
74
Диффузная балансировка загрузки
75
Диффузная балансировка загрузки
76
Диффузная балансировка загрузки
77
Статическое распределение
78
Постановка задачи диффузной балансировки
Дано:• Количество точек – N• Количество процессоров – p• Процессор i обработал ni точек за время ti
Требуется:• Найти числа точек n’i , которое следует
обработать процессорам на следующем шаге • Определить сколько точек каждый из
процессоров должен передать соседним процессорам
79
Планирование нагрузки
1
0
'p
jt
n
tn
i
j
j
i
i
Nn
80
• Статическая и динамическая балансировка загрузки процессоров– Статическая балансировка
• метод сдваивания• геометрический параллелизм• конвейерный параллелизм
– Динамическая балансировка• коллективное решение• диффузная балансировка
Балансировка и алгоритмы
81
Крылья, ноги и хвосты. Гостелерадио, «Экран», 1985.
82
Общая схема вычисленийK = 1 000 000;
шаг_вывода = 10 000;
for(шаг=0;шаг<k;шаг++)
{
for(кирпич=rank*n/p;кирпич<(rank+1)*n/p;кирпич++)
Уложить (кирпич)
Обменяться данными о точках, прилегающих к внутренним границам()
if( шаг % шаг_вывода == 0 )
{
Вывести промежуточные результаты()
}
}83
r=0;for(i=0;i<=n;i++){d=a[i]+b[i]+r;c[i]=d%10;r=d/10;}
c[i]=r;
Определение суммы двух многоразрядных чисел
T1= 4nс
21015596141
3221643577
6934317835
84
Последовательное распространение разряда переноса на четырёх процессорах
99 99 99 991
100100
100100100 00 00 00
«Параллельный» алгоритм
100000000
1
99999999
85
?
Параллельный алгоритм« »
86
• Спекулятивное вычисление двух сумм
Спекулятивный алгоритм
99 99 99 991
99 99 99 100 +0100 100 100 +1
100 00 00 00
100000000
1
99999999
87
r1=0;r2=1;for(i=0;i<=n1;i++)
{d1=a[i]+b[i]+r1;c1[i]=d1%10;r1=d1/10;
d2=a[i]+b[i]+r2; c2[i]=d2%10; r2=d2/10; }Recv(&r)if(r)c=c1;else c=c2;
Спекулятивный алгоритм
T’= 8n1с
88
• Спекулятивное вычисление двух сумм
Спекулятивный алгоритм
%502
8
41
p
p
cp
c
E
pS
pn
T
nT
99 99 99 991
99 99 99 100 +0100 100 100 +1
100 00 00 00
89
A. Объём оперативной памяти одного процессорного узла достаточен для одновременного размещения в ней всех элементов массива
B. Объём оперативной памяти одного процессорного узла мал для одновременного размещения в ней всех элементов массива
Две задачи сортировки массива чисел
90
• Расположить N элементов массива a таким образом, чтобы для любого
выполнялось неравенство
Задача А
1 ii aa
2,,0 Ni
91
Пузырьковая сортировка
2
1
3
4
5
6
92
22
221
nOnnn
nKbubble
Сортировка сдваиванием
93
1523 6263 1363 9217 1268 1490 2642 5132 1235 2366 1336 1279 1268 0149 2246 1235 12233566 11233679 01124689 12223456
1112223333566679 011122224456689
011111122222223333445566666789
np
pnE
np
pn
pn
n
nS
np
nn
pn
Kppp
pn
pn
K
ppn
pn
KnK
pn
pn
npnp
bubblebubble
bubblep
22/22
2
2
2
2/
2
2
41
1)(
41
1
22
2)(
22
121
41
24
...42
4832
Сортировка сдваиванием
94
95
1523 6263 1363 9217 1268 1490 2642 5132 1235 2366 1336 1279 1268 0149 2246 1235 12233566 11233679 01124689 12223456
1112223333566679 011122224456689
011111122222223333445566666789
np
pnE
np
pnS pp 222
41
1)(
41
1)(
%100)()( 2
pnEpnS
npпри
pp
Вывод
• Эффективность больше 100%, поскольку использован неудачный медленный последовательный алгоритм.
96
• Пусть массив можно разместить на p процессорах. • Пусть на процессоре с номером rank размещено
элементов массива .
• Расположить N элементов массивов таким образом, чтобы:– для любых и
выполнялось неравенство
– для любого – выполнялось неравенство
Задача B
prank
rank
ranknN0
1,,0 prank 2,,0 rankni
rankarankn
ranka
ranki
ranki aa 1
2,,0 prank 1
01
rankrank
naa rank
97
• Части массива хранятся на нескольких процессорах– Каждая часть массива должна быть упорядочена– На процессорах с большими номерами должны быть
размещены элементы массива с большими значениями
• Правильно
• Ошибка
• Ошибка
Задача B
9,8,87,7,6,55,3,2,1
9,8,87,6,7,55,3,2,1
9,8,78,7,6,55,3,2,1
3
11
p
N
98
• Будем рассматривать только процесс упорядочивания элементов:– Перед началом сортировки на каждом из
процессоров уже есть часть элементов массива– После окончания сортировки на каждом из
процессоров должно остаться столько элементов, сколько их было в начале (но, это уже могут быть другие элементы, расположенные ранее на других процессорах)
Задача B
99
Что необходимо превзойти
Хороший последовательный алгоритм сортирует за время или
Сортировка будет выполнена всего за 20 просмотров массива.
Начальное распределение массива может занимать сравнимое время.
100
nnO log nO
nnT
n
2010log
109
2
9
– Упорядочивание фрагментов массива на каждом из процессоров ?
– Перераспределение элементов массива между процессорами
Этапы сортировки
101
?Конструирование наилучшего последовательного алгоритма
102
Алгоритм сортировки
Среднее число операций Максимальное число операций
Быстрая (qsort) 11.7 n log2n O(n 2)
Пирамидальная (hsort)
16 n log2n 18 n log2 n+ 38n
Слияние списков (lsort)
10 n log2n O(n log2n)
Сравнение алгоритмов сортировки
2CnnM
103
Пусть f(N)<C∙g(N), ну и что?
• Где тут наши 2 Гигобайта оперативной памяти???
N0 N
f(N)f(N)
g(N)
g(N)
104
100 1 000 10 000 100 000 1 000 000 1E7 1E810
20
30
40
50
60
70
80
90
100
110
120
130
140
K(n
)=10
9 T(n
) / (
n lo
g 2(n))
n - Размер массива
Исходный массив не упорядочен
D sort - слияние
Q
sort - библиотечная процедура qsort
L sort - слияние списков
H sort - пирамидальная сортировка
W sort - быстрая сортировка
Массив упорядочен Wsort - быстрая сортировка
Константа времени сортировки T=10-9K N log2(N)
105
100 1 000 10 000 100 000 1 000 000 1E7 1E80
5
10
15
20
25
30
35
40
45
50
55
60
65R
(n),
K(n
)
n - Размер массива
исходный массив не упорядочен
K(n)= 109T(n)/(n
log
2(n))
R(n)= M(n)/(n
log
2(n))
исходный массив упорядочен по убыванию
R(n)= M(n)/(n
log
2(n))
T=10-9K n log2(n)
M=10-9R n log2(n)
Пирамидальная сортировка: константы времени и числа
операций
Время работы алгоритма определяется:
• Числом операций сравнения и перестановки элементов массива
• Временем обращения к оперативной памяти
(чтения и записи элементов массива)
106
100 1 000 10 000 100 000 1 000 000 1E7 1E816
18
20
22
24
26
28
30
32
34
36
K(n
)=10
9 T(n
) / (
n lo
g 2(n))
n - Размер массива
Dsort
- слияние
Hsort
- пирамидальная
сортировка
DHsort
- оптимизированная
сортировка (слияние+пирамидальная)
Константа времени сортировки наилучшего алгоритма
107
сортировать ( массив mas, число элементов n ) { если (n > 1) { // сортировка первой половины массива сортировать ( mas, n/2); // сортировка второй половины массива сортировать ( mas+n/2, n-n/2); // слияние отсортированных половинок массива
слияние ( mas, n/2, mas+n/2,n-n/2); } }
ИзящныйИзящный алгоритм сортировки массива слиянием
108
Dsort(intsort *array, int n){ a=array;// сортируемый массив b=array_second; // вспомогательный массив
for(i=1;i<n;i=i*2) // размер объединяемых фрагментов{for(j=0;j<n;j=j+2*i) // начало первого из объединяемых
// фрагментов{r=j+i; // начало второго из объединяемых фрагментовn1=max(min(i,n-j), 0);n2=max(min(i,n-r), 0);
// слияние упорядоченных фрагментовb = a[r…r+n1] & a[j…j+n2]
}c=a;a=b;b=c;}
Алгоритм сортировки массива слиянием
109
Слияние упорядоченных фрагментов
for(ia=0,ib=0,k=0;k<n1+n2;k++)
{
if(ia>=n1) b[j+k]=a[r+ib++];
else
if(ib>=n2) b[j+k]=a[j+ia++];
else
if(a[j+ia]<a[r+ib]) b[j+k]=a[j+ia++];
else b[j+k]=a[r+ib++];
}
110
• Требуется 2 + 4 + 8 + 16 тактов (8 процессоров)
Сортировка слиянием методом сдваивания
Для просмотра анимации возможно требуется установить свободно распространяемый Swiff Point Player: http://www.globfx.com/products/swfpoint/
111
• Требуется 8 тактов вместо 16-ти
Слияние двух массивов двумя процессорами
Ускорение при методе сдваивания
)1(12log
log,1,
,
221
21
pkppn
kpn
nnkpnT
nTpnS
113
32
3156301
1
3232,10
5.3
301
13.1
44,10
1
2
1
2
9
1
2
9
kk
kk
S
kk
S
• k1 – сортировка, k2 – передача данных
113
До 10^5 пирамидальная, после - слияние
До 10^5 пирамидальнаяпосле – слияние упорядоченных фрагментов
A. Объём оперативной памяти одного процессорного узла достаточен для одновременного размещения в ней всех элементов массива
B. Объём оперативной памяти одного процессорного узла мал для одновременного размещения в ней всех элементов массива
Две задачи сортировки массива чисел
119
• Части массива хранятся на нескольких процессорах– Каждая часть массива должна быть упорядочена– На процессорах с большими номерами должны быть
размещены элементы массива с большими значениями
• Правильно
• Ошибка
• Ошибка
Задача B
9,8,87,7,6,55,3,2,1
9,8,87,6,7,55,3,2,1
9,8,78,7,6,55,3,2,1
3
11
p
N
120
• Будем рассматривать только процесс упорядочивания элементов:– Перед началом сортировки на каждом из
процессоров уже есть часть элементов массива– После окончания сортировки на каждом из
процессоров должно остаться столько элементов, сколько их было в начале (но, это уже могут быть другие элементы, расположенные ранее на других процессорах)
Задача B
121
– Упорядочивание фрагментов массива на каждом из процессоров
– Перераспределение элементов массива между процессорами с сохранением упорядоченности массива на каждом отдельном процессоре
Этапы сортировки
122
?Стратегия перераспределения данных между процессорами
123
Сеть сортировки (пузырёк) n=6 s=2n-3=9
2
1
3
4
5
6
124
Пузырьковая сортировка
2
1
3
4
5
6
125
22
221
nOnnn
nKbubble
Сеть сортировки (пузырёк) n=6 s=2n-3=9
2
1
3
4
5
6
126
Сеть сортировки четно-нечетные перестановки n=6 s=n=6
2
1
3
4
5
6
127
n
pn
pn
O 2log
Минимальная сеть сортировки n=6 s=5
2
1
3
4
Шаги: 1 2 3 4 5
5
6
128
Минимальные сети сортировки[Дональд Э.Кнут]
n=6 s=5 n=10 s=7 n=9 s=8
n=12 s=8n=16 s=9
129
Обменная сортировка со слиянием8ми элементов
130
2log
log2
22
ppn
pn
O
Сортировка блоковОДИНАКОВОГО РАЗМЕРА
2
1
3
4
Шаги: 1 2 3 4 5 6
5
6
131
Алгоритм сортировки Среднее число операций
Пирамидальная O(n log2n)
Слияние O(n log2n)
Параллельная сортировка методом сдваивания.Объём данных ограничен оперативной памятью вычислительного узла
Параллельная четно-нечетная сортировка
Объём данных ограничен общей оперативной памятью
Параллельная «обменная сортировка со слиянием»
Сравнение алгоритмов сортировки
2log
log2
22
ppn
pn
pn
O
n
pn
pn
O 2log
n
pn
pn
O 2log
nknkpn
pn
kT scc
2log2
nkkpn
pn
kT scc
2log
132
for(ia=0,ib=0,k=0;k<n;k++) {
if(ia>=n1) c[k]=b[ib++];
else
if(ib>=n2) c[k]=a[ia++];
else
if(a[ia]<b[ib]) c[k]=a[ia++];
else c[k]=b[ib++];
}
// n – число элементов в каждом из массивов a,b
Слияние упорядоченных фрагментовrank1, a[n]
rank2, b[n]
133
Join(int *a, int *b, int *c, int n,rank1,rank2)
{
if(rank==rank1)
for(ia=0,ib=0,k=0;k<n;)
{
if(a[ia]<b[ib]) c[k++]=a[ia++];
else c[k++]=b[ib++];
}
else
for(ia=n-1,ib=n-1,k=n-1;k>=0;)
{
if(a[ia]>b[ib]) c[k--]=a[ia--];
else c[k--]=b[ib--];
}
}
Слияние упорядоченных фрагментовrank1
rank2
134
// взаимодействие процессоров rank и rankC
int *a,*b,*c,*tmp;
ASend(a,n,rankC);
ARecv(b,n,rankC);
ASync();
Join(a,b,c,n,min(rank,rankC),max(rank,rankC));
tmp=a;
a=c;
c=tmp;
Реализация компаратора слияния
135
P T,сек E S Emax Smax sp
1 83.51 100.00% 1.00 100% 1.0 0
2 46.40 90.00% 1.80 100% 2.0 1
3 35.93 77.48% 2.32 95% 2.8 3
4 29.68 70.35% 2.81 96% 3.9 3
5 24.45 68.33% 3.42 91% 4.5 5
6 22.16 62.80% 3.77 92% 5.5 5
7 21.82 54.67% 3.83 89% 6.2 6
8 19.95 52.32% 4.19 90% 7.2 6
16 12.36 42.22% 6.75 82% 13.1 10
27 9.32 33.20% 8.97 74% 20.0 14
32 7.85 33.24% 10.64 73% 23.3 15
48 6.45 26.97% 12.95 66% 31.9 19
64 4.92 26.53% 16.98 64% 40.9 21
128 3.19 20.47% 26.20 56% 71.5 28
192 2.52 17.29% 33.19 51% 98.2 33
256 1.99 16.41% 42.02 49% 124.6 36
384 1.63 13.33% 51.20 49% 187.0 41
512 1.29 12.64% 64.74 42% 217.4 45
640 1.21 10.78% 69.02 41% 264.7 47
n=108 2/)1(loglog1
1
loglog
log,
222
2max
pppsn
npnE
np
2 2log log 1
2p
p ps
136
• Рассмотрены основные методы построения параллельных алгоритмов
• Показано, как за счет использования неэффективных, но обладающих большим внутренним параллелизмом алгоритмов можно сокращать время решения задачи на многопроцессорной системе
• Рассмотрен ряд параллельных алгоритмов сортировки массивов и выполнено сравнение с «наилучшим» последовательным алгоритмом
Заключение
137
1. Воеводин В.В., Воеводин Вл.В. Параллельные вычисления. - СПб.: БХВ-Петербург, 2002.
2. Грегори Р. Эндрюс - Основы многопоточного, параллельного и распределенного программирования. "Вильямс ", 2003
3. Языки программирования. Редактор Ф.Женюи. Перевод с англ. В.П.Кузнецова. Под ред. В.М.Курочкина. М:."Мир", 1972 Э. Дейкстра. Взаимодействие последовательных процессов. http://khpi-iip.mipk.kharkiv.edu/library/extent/dijkstra/ewd123/index.html
4. Дональд Э.Кнут. Искусство программирования, т.3. Сортировка и поиск 2-е изд.: Пер. с английского – М.: Издательский дом «Вильямс», 2001.
5. Седжвик Роберт. Фундаментальные алгоритмы на С++. Анализ/Структуры данных/Сортировка/Поиск: Пер. с англ./Роберт Седжвик. - СПб.: ООО "ДиаСофтЮП", 2002.-688с.
6. Якобовский М.В. Параллельные алгоритмы сортировки больших объемов данных. Москва, 2008. http://lira.imamod.ru/FondProgramm/Sort/ParallelSort.pdf
Список литературы
138
Литература…
Учебные курсы Интернет Университета Информационных технологий• Гергель В.П. Теория и практика параллельных вычислений. —
http://www.intuit.ru/department/calculate/paralltp/
Лекции в форме видео-конференций• Гергель В.П. Основы параллельных вычислений. —
http://www.hpcu.ru/courses/15/• Немнюгин С.А. Основы параллельного программирования с
использованием MPI . — http://www.hpcu.ru/courses/14/• Крюков В.А., Бахтин В.А. Параллельное программирование с OpenMP .
— http://www.hpcu.ru/courses/16/
Дополнительные учебные курсы:• Воеводин В.В. Вычислительная математика и структура алгоритмов. —
http://www.intuit.ru/department/calculate/calcalgo/
139
Литература
Ресурсы Internet
• http://parallel.ru• http://top500.org• http://supercomputers.ru
140
Якобовский М.В., д.ф.-м.н., зав. сектором «Программного обеспечения многопроцессорных систем и вычислительных сетей» Института математического моделирования Российской академии наукe-mail: [email protected] web: http://lira.imamod.ru
Авторы
141