якобовский - введение в параллельное программирование...
-
Upload
michael-karpov -
Category
Technology
-
view
1.557 -
download
5
Transcript of якобовский - введение в параллельное программирование...
![Page 1: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/1.jpg)
МОЛОДЕЖНАЯ ШКОЛА«Суперкомпьютерные технологии
в науке, промышленности и образовании»
ННГУ им. Н.И. Лобачевского, Нижний Новгород, 26-31 октября 2009 г.
КОНСОРЦИУМ УНИВЕРСИТЕТОВ РОССИИ
Курс: Введение в параллельные алгоритмы
Якобовский Михаил Владимировичд.ф.-м.н., зав. сектором, Институт математического моделирования РАН, Москва
![Page 2: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/2.jpg)
Всероссийская школа «Суперкомпьютерные технологии в образовании, науке и промышленности»
Содержание
• Введение• Постановка проблемы• Основные понятия• Базовые методы• Сумма ряда• Параллельная сортировка • Выводы• Контрольные вопросы• Литература
2 из N
![Page 3: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/3.jpg)
Всероссийская школа «Суперкомпьютерные технологии в образовании, науке и промышленности»
Постановка проблемы• Вычислительная мощность суперкомпьютеров быстро растет• Примеров успешного полноценного использования
суперкомпьютеров мало• В среднем вычислительная мощность суперкомпьютеров
используется не более, чем на несколько процентов
• Необходима разработка алгоритмической и программной базы, создание которой возможно исключительно на основе тесного взаимодействия специалистов прикладных областей и специалистов в области создания параллельных приложений
3 из N
![Page 4: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/4.jpg)
Введение
• Курс знакомит с некоторыми принципами разработки параллельных алгоритмов. Из всего многообразия причин, побуждающих к использованию суперкомпьютеров, в рамках курса рассматриваются только две:– сокращение времени решения прикладных
задач– обеспечение возможности решения больших
задач за заданное время
4
![Page 5: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/5.jpg)
Кризис эффективности
• Вычислительная мощность суперкомпьютеров велика, но: – Она образована суммой мощностей множества
исполнительных устройств• На протяжении ряда лет увеличение
производительность компьютера автоматически означало снижение времени работы существующих программ. Теперь это не так:– Последовательные программы не могут
работать на многопроцессорных системах быстрее, чем на последовательных
5
![Page 6: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/6.jpg)
Кризис эффективности
• Время вычислительных систем, обладающих существенной производительностью и имеющих в своем составе только один процессор прошло
• Автоматическое преобразование последовательных программ в параллельные невозможно
• Необходимо знать существующие и развивать новые методы решения задач на многопроцессорных системах
6
![Page 7: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/7.jpg)
Уточнение круга рассматриваемых систем
• Системы на основе объединенных сетью типовых вычислительных узлов – системы с распределенной оперативной памятью
• Системы с доступом всех процессоров к общей оперативной памяти
• Графические ускорители• ПЛИС• Нейрокомпьютеры• Другие …
7
![Page 8: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/8.jpg)
Многопроцессорные системы с распределенной памятью
Процессор 1 Процессор 2 Процессор 3
ЛокальнаяПамять 1
ЛокальнаяПамять 2
ЛокальнаяПамять 3
Router2
Router1
P-Nodes
IO-Nodes
Network концентраторы
Процессорные узлы
8
![Page 9: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/9.jpg)
Многопроцессорные системы с общей памятью
Процессор 1 Процессор 2 Процессор 3
Общая оперативная память
9
![Page 10: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/10.jpg)
Гибридные вычислительные системы
10
Процессор 1 Процессор 2 Процессор 3
Общая оперативная память
Процессор 7
Процессор 8
Процессор 9
Общая оперативная память
Процессор 4
Процессор 5
Процессор 6
Общая оперативная память
сеть
![Page 11: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/11.jpg)
Уточнение круга рассматриваемых алгоритмов
• Слабо взаимодействующие последовательные процессы
11
![Page 12: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/12.jpg)
• При запуске указываем число требуемых процессоров Np и название программы
• На выделенных для расчета узлах запускается Np копий указанной программы
– Например, на двух узлах запущены три копии программы. Копия программы с номером 1 не имеет непосредственного доступа к оперативной памяти копий 0 и 2:
• Каждая копия программы получает два значения: – Np– rank из диапазона [0 … Np-1]
• Любые две копии программы могут непосредственно обмениваться данными с помощью функций передачи сообщений
Модель программы на распределенной памяти
0 1 2
12
![Page 13: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/13.jpg)
• Работа начинается с запуска одной программы• При необходимости программа порождает новые процессы,
эти процессы:– Обладают собственными локальными переменными– Имеют доступ к общим глобальным переменнымint a_global; main нить1 нить2main(){int b1_local; запуск нити1} запуск нити2 fun()
{int b2_local; ожидание} окончания работы
Модель программы на общей памяти
13
![Page 14: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/14.jpg)
Свойства канала передачи данныхT(n)=n*Tбайта+ Tлатентности
Число передаваемых байт
Infiniband
14
![Page 15: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/15.jpg)
• Синхронный методSend(адрес данных, размер, номер процессора)Recv(адрес данных, размер, номер процессора)
• Асинхронные методы– НебуферизованныйASend(адрес данных, размер, номер процессора)ARecv(адрес данных, размер, номер процессора)ASync
– БуферизованныйABSend(адрес данных, размер, номер процессора)
Методы передачи данных
15
![Page 16: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/16.jpg)
• A=3• Send(&A)• A=5
Синхронный
B=4 Recv(&B) Print(B)
SendRecv
Print(B)A=5
B=4A=3
Результат3
16
![Page 17: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/17.jpg)
• 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
![Page 18: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/18.jpg)
• 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
![Page 19: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/19.jpg)
• 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
![Page 20: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/20.jpg)
• 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
![Page 21: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/21.jpg)
• Целочисленная неотрицательная переменная • Две атомарные операции, не считая
инициализации• 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
![Page 22: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/22.jpg)
ускорениепараллельного
алгоритма
S(p)=T(1)/T(p)
Ускорение и эффективность параллельных алгоритмов
Ускорение параллельного алгоритма относительно
наилучшего последовательного
S*(p)=T * /T(p)E *(p)=S *(p)/p
эффективностьиспользования
процессорной мощности
E(p)=S(p)/p
22
![Page 23: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/23.jpg)
• Да, если:– Сравниваем с плохим последовательным
алгоритмом– Аппаратные особенности вычислительной
системы косвенно влияют на эффективную скорость обработки данных
Может ли быть S(p)>p ?
23
![Page 24: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/24.jpg)
• Да– Если первый алгоритм позволяет использовать
больше процессоров, чем второй.
• Самый эффективный алгоритм – использующий один (1) процессор. – Его эффективность по определению равна
100%, но он не всегда самый быстрый.
Может ли неэффективный алгоритм работать быстрее эффективного?
24
![Page 25: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/25.jpg)
• Все элементарные операции (+ - * / ) выполняются за время с
• Все операции выполняются точно, результат не зависит от порядка их выполнения
Определить сумму конечного ряда
25
![Page 26: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/26.jpg)
S=1;a=1;for(i=1;i<= n;i++){
a=a*x/i;S=S+a;
}
Последовательный алгоритм
T1= 3nс
26
![Page 27: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/27.jpg)
Параллельный алгоритм
• Вычислить для всех i =1,…,n : xi
• Вычислить для всех i =1,…,n : i!
• Вычислить для всех i =1,…,n : ai =
• Вычислить сумму всех членов ai
27
![Page 28: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/28.jpg)
Для вычисления xi воспользуемся методом бинарного умножения
x
1 x2
2 x3 x4
3 x5 x6 x7 x8
4 x9 x10 x11 x12 x13 x14 x15 x16
xi
28
![Page 29: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/29.jpg)
Для вычисления 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
![Page 30: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/30.jpg)
Для вычисления 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
![Page 31: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/31.jpg)
Для вычисления 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
![Page 32: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/32.jpg)
Параллельный алгоритм
• Вычислить все 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
![Page 33: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/33.jpg)
p=n
Ускорение и эффективность при p=n
21.5
1.5
33
![Page 34: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/34.jpg)
Методы построения параллельных алгоритмов
… если для нас представляют интерес реально работающие системы, то требуется убедиться, (и убедить всех сомневающихся) в корректности наших построений
… системе часто придется работать в невоспроизводимых обстоятельствах, и мы едва ли можем ожидать сколько-нибудь серьезной помощи от тестов
Dijkstra E.W.1966
34
![Page 35: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/35.jpg)
• Методы построения параллельных алгоритмов и их свойства:– Статическая балансировка
• метод сдваивания• геометрический параллелизм• конвейерный параллелизм
– Динамическая балансировка• коллективное решение• диффузная балансировка загрузки
Огласите весь список, пожалуйста! «Напарник», Леонид Гайдай
35
![Page 36: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/36.jpg)
• Обладает запасом внутреннего параллелизма– Есть возможность одновременного выполнения
операций
• Допускает возможность равномерного распределения вычислительных операций между процессорами
• Обладает низким уровнем накладных расходов
Хороший параллельный алгоритм
большим
большим числом
36
![Page 37: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/37.jpg)
• Операции, отсутствующие в наилучшем последовательном алгоритме:– Синхронизация– Обмен данными– Дублирование операций– Новые операции
Накладные расходы
37
![Page 38: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/38.jpg)
• Потери времени на передачу данных между процессами
Процессор 1 Процессор 2
Обмен данными
38
![Page 39: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/39.jpg)
• Потери времени на ожидание долго выполняющихся процессов Процессор 1 Процессор 2 Процессор 3
Синхронизация
39
![Page 40: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/40.jpg)
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
![Page 41: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/41.jpg)
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
![Page 42: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/42.jpg)
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
![Page 43: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/43.jpg)
• Каскадная схема
• Модифицированная каскадная схема
Метод сдваивания
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
![Page 44: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/44.jpg)
Стена Фокса
n – ширина стенык – высота стены
44
![Page 45: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/45.jpg)
Одномерная разностная схема для уравнения диффузии
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
![Page 46: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/46.jpg)
Решение одномерного уравнения на 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
![Page 47: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/47.jpg)
Метод геометрического параллелизма
c
sp
c
sp
scpc
np
knE
np
pknS
kp
knknTknknT
41
1)(
41
1)(
4)()(1
47
![Page 48: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/48.jpg)
А почему?
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
![Page 49: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/49.jpg)
?
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
![Page 50: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/50.jpg)
?
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
![Page 51: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/51.jpg)
?
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
![Page 52: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/52.jpg)
?scp kp
knknT 4)(
0 1 2 3 4 5
=<
=<>=
=<>=
=<>=
=<>=
>=
52
![Page 53: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/53.jpg)
!scp kp
knknT 1)(
0 1 2 3 4 5
=<
=<>=
=<>=
=<>=
=<>=
>=
53
![Page 54: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/54.jpg)
!scp kp
knknT 2)(
0 1 2 3 4 5
=<
=<>=
=<>=
=<>=
=<>=
>=
54
![Page 55: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/55.jpg)
!scp kp
knknT 3)(
0 1 2 3 4 5
=<
=<
>=
=<>=
=<>=
=<>=
>=
55
![Page 56: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/56.jpg)
!scp kp
knknT 4)(
0 1 2 3 4 5
=<
=<
>=
=<
>=
=<>=
=<>=
>=
56
![Page 57: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/57.jpg)
!scp pkp
knknT )(
0 1 2 3 4 5
=<
=<
>=
=<
>=
=<
>=
=<>=
>=
57
![Page 58: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/58.jpg)
!scp kpp
knknT )1()(
0 1 2 3 4 5
=<
=<
>=
=<
>=
=<
>=
=<>=
>=
58
![Page 59: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/59.jpg)
!0 1 2 3 4 5
=<
=<
>=
=<
>=
=<
>=
=<>=
>=
scp kpp
knknT )2()(
59
![Page 60: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/60.jpg)
!0 1 2 3 4 5
=<
=<
>=
=<
>=
=<
>=
=<>=
>=
scp kpp
knknT )3()(
60
![Page 61: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/61.jpg)
!0 1 2 3 4 5
=<
=<
>=
=<
>=
=<
>=
=<>=
>=
scp kpp
knknT )4()(
61
![Page 62: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/62.jpg)
!0 1 2 3 4 5
=<
=<
>=
=<
>=
=<
>=
=<>=
>=
scp pkp
knknT 2)(
62
![Page 63: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/63.jpg)
!0 1 2 3 4 5
=<
>==<
=<>=
>==<
=<>=
>=
scp pkp
knknT 4)(
63
![Page 64: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/64.jpg)
!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
![Page 65: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/65.jpg)
Метод коллективного решения (укладка паркета)
scp pN
T
s
cpmax
s
c
65
![Page 66: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/66.jpg)
Метод коллективного решения (укладка паркета)
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
![Page 67: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/67.jpg)
s
crp
max
r – размер порции
Как правильно?
s
c
s
c
rr
p
max
или
Зависит ли время передачи данных от размера порции (задания)?
67
![Page 68: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/68.jpg)
Send(ai); Send(ai+1); Recv(s);
Вычисление определенного интеграла
i
a
a
B
A
i
i
dxxfdxxfI1
ii
spT max
1 2ai ai+1
68
![Page 69: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/69.jpg)
Метод конвейерного параллелизма
?)()(1 p
knknTknknT cpc
?Время выполнения на p процессорах
69
![Page 70: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/70.jpg)
Метод конвейерного параллелизма
c
sp
c
sp
scpc
knEpknS
pn
kp
knknTknknT
1
1)(
1
1)(
)()(1
70
![Page 71: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/71.jpg)
При статической балансировке возможен дисбаланс загрузки процессоров
• Причины дисбаланса– Разные процессоры– Внешнее воздействие– Разная вычислительная сложность заданий
• Результат дисбаланса– Эффективная производительность определяется самым
медленным процессором
Диффузная балансировка
71
![Page 72: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/72.jpg)
Стена Фокса
Какой объем работ забрать у среднего процессора и кому его передать?
72
![Page 73: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/73.jpg)
Метод геометрического параллелизма
73
![Page 74: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/74.jpg)
Метод геометрического параллелизма
74
![Page 75: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/75.jpg)
Диффузная балансировка загрузки
75
![Page 76: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/76.jpg)
Диффузная балансировка загрузки
76
![Page 77: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/77.jpg)
Диффузная балансировка загрузки
77
![Page 78: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/78.jpg)
Статическое распределение
78
![Page 79: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/79.jpg)
Постановка задачи диффузной балансировки
Дано:• Количество точек – N• Количество процессоров – p• Процессор i обработал ni точек за время ti
Требуется:• Найти числа точек n’i , которое следует
обработать процессорам на следующем шаге • Определить сколько точек каждый из
процессоров должен передать соседним процессорам
79
![Page 80: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/80.jpg)
Планирование нагрузки
1
0
'p
jt
n
tn
i
j
j
i
i
Nn
80
![Page 81: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/81.jpg)
• Статическая и динамическая балансировка загрузки процессоров– Статическая балансировка
• метод сдваивания• геометрический параллелизм• конвейерный параллелизм
– Динамическая балансировка• коллективное решение• диффузная балансировка
Балансировка и алгоритмы
81
![Page 82: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/82.jpg)
Крылья, ноги и хвосты. Гостелерадио, «Экран», 1985.
82
![Page 83: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/83.jpg)
Общая схема вычисленийK = 1 000 000;
шаг_вывода = 10 000;
for(шаг=0;шаг<k;шаг++)
{
for(кирпич=rank*n/p;кирпич<(rank+1)*n/p;кирпич++)
Уложить (кирпич)
Обменяться данными о точках, прилегающих к внутренним границам()
if( шаг % шаг_вывода == 0 )
{
Вывести промежуточные результаты()
}
}83
![Page 84: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/84.jpg)
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
![Page 85: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/85.jpg)
Последовательное распространение разряда переноса на четырёх процессорах
99 99 99 991
100100
100100100 00 00 00
«Параллельный» алгоритм
100000000
1
99999999
85
![Page 86: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/86.jpg)
?
Параллельный алгоритм« »
86
![Page 87: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/87.jpg)
• Спекулятивное вычисление двух сумм
Спекулятивный алгоритм
99 99 99 991
99 99 99 100 +0100 100 100 +1
100 00 00 00
100000000
1
99999999
87
![Page 88: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/88.jpg)
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
![Page 89: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/89.jpg)
• Спекулятивное вычисление двух сумм
Спекулятивный алгоритм
%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
![Page 90: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/90.jpg)
A. Объём оперативной памяти одного процессорного узла достаточен для одновременного размещения в ней всех элементов массива
B. Объём оперативной памяти одного процессорного узла мал для одновременного размещения в ней всех элементов массива
Две задачи сортировки массива чисел
90
![Page 91: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/91.jpg)
• Расположить N элементов массива a таким образом, чтобы для любого
выполнялось неравенство
Задача А
1 ii aa
2,,0 Ni
91
![Page 92: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/92.jpg)
Пузырьковая сортировка
2
1
3
4
5
6
92
22
221
nOnnn
nKbubble
![Page 93: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/93.jpg)
Сортировка сдваиванием
93
1523 6263 1363 9217 1268 1490 2642 5132 1235 2366 1336 1279 1268 0149 2246 1235 12233566 11233679 01124689 12223456
1112223333566679 011122224456689
011111122222223333445566666789
![Page 94: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/94.jpg)
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
![Page 95: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/95.jpg)
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
![Page 96: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/96.jpg)
Вывод
• Эффективность больше 100%, поскольку использован неудачный медленный последовательный алгоритм.
96
![Page 97: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/97.jpg)
• Пусть массив можно разместить на 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
![Page 98: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/98.jpg)
• Части массива хранятся на нескольких процессорах– Каждая часть массива должна быть упорядочена– На процессорах с большими номерами должны быть
размещены элементы массива с большими значениями
• Правильно
• Ошибка
• Ошибка
Задача 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
![Page 99: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/99.jpg)
• Будем рассматривать только процесс упорядочивания элементов:– Перед началом сортировки на каждом из
процессоров уже есть часть элементов массива– После окончания сортировки на каждом из
процессоров должно остаться столько элементов, сколько их было в начале (но, это уже могут быть другие элементы, расположенные ранее на других процессорах)
Задача B
99
![Page 100: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/100.jpg)
Что необходимо превзойти
Хороший последовательный алгоритм сортирует за время или
Сортировка будет выполнена всего за 20 просмотров массива.
Начальное распределение массива может занимать сравнимое время.
100
nnO log nO
nnT
n
2010log
109
2
9
![Page 101: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/101.jpg)
– Упорядочивание фрагментов массива на каждом из процессоров ?
– Перераспределение элементов массива между процессорами
Этапы сортировки
101
![Page 102: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/102.jpg)
?Конструирование наилучшего последовательного алгоритма
102
![Page 103: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/103.jpg)
Алгоритм сортировки
Среднее число операций Максимальное число операций
Быстрая (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
![Page 104: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/104.jpg)
Пусть f(N)<C∙g(N), ну и что?
• Где тут наши 2 Гигобайта оперативной памяти???
N0 N
f(N)f(N)
g(N)
g(N)
104
![Page 105: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/105.jpg)
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
![Page 106: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/106.jpg)
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
![Page 107: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/107.jpg)
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
![Page 108: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/108.jpg)
сортировать ( массив mas, число элементов n ) { если (n > 1) { // сортировка первой половины массива сортировать ( mas, n/2); // сортировка второй половины массива сортировать ( mas+n/2, n-n/2); // слияние отсортированных половинок массива
слияние ( mas, n/2, mas+n/2,n-n/2); } }
ИзящныйИзящный алгоритм сортировки массива слиянием
108
![Page 109: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/109.jpg)
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
![Page 110: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/110.jpg)
Слияние упорядоченных фрагментов
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
![Page 111: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/111.jpg)
• Требуется 2 + 4 + 8 + 16 тактов (8 процессоров)
Сортировка слиянием методом сдваивания
Для просмотра анимации возможно требуется установить свободно распространяемый Swiff Point Player: http://www.globfx.com/products/swfpoint/
111
![Page 112: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/112.jpg)
• Требуется 8 тактов вместо 16-ти
Слияние двух массивов двумя процессорами
![Page 113: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/113.jpg)
Ускорение при методе сдваивания
)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
![Page 114: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/114.jpg)
![Page 115: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/115.jpg)
До 10^5 пирамидальная, после - слияние
![Page 116: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/116.jpg)
До 10^5 пирамидальнаяпосле – слияние упорядоченных фрагментов
![Page 117: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/117.jpg)
![Page 118: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/118.jpg)
A. Объём оперативной памяти одного процессорного узла достаточен для одновременного размещения в ней всех элементов массива
B. Объём оперативной памяти одного процессорного узла мал для одновременного размещения в ней всех элементов массива
Две задачи сортировки массива чисел
119
![Page 119: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/119.jpg)
• Части массива хранятся на нескольких процессорах– Каждая часть массива должна быть упорядочена– На процессорах с большими номерами должны быть
размещены элементы массива с большими значениями
• Правильно
• Ошибка
• Ошибка
Задача 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
![Page 120: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/120.jpg)
• Будем рассматривать только процесс упорядочивания элементов:– Перед началом сортировки на каждом из
процессоров уже есть часть элементов массива– После окончания сортировки на каждом из
процессоров должно остаться столько элементов, сколько их было в начале (но, это уже могут быть другие элементы, расположенные ранее на других процессорах)
Задача B
121
![Page 121: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/121.jpg)
– Упорядочивание фрагментов массива на каждом из процессоров
– Перераспределение элементов массива между процессорами с сохранением упорядоченности массива на каждом отдельном процессоре
Этапы сортировки
122
![Page 122: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/122.jpg)
?Стратегия перераспределения данных между процессорами
123
![Page 123: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/123.jpg)
Сеть сортировки (пузырёк) n=6 s=2n-3=9
2
1
3
4
5
6
124
![Page 124: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/124.jpg)
Пузырьковая сортировка
2
1
3
4
5
6
125
22
221
nOnnn
nKbubble
![Page 125: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/125.jpg)
Сеть сортировки (пузырёк) n=6 s=2n-3=9
2
1
3
4
5
6
126
![Page 126: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/126.jpg)
Сеть сортировки четно-нечетные перестановки n=6 s=n=6
2
1
3
4
5
6
127
n
pn
pn
O 2log
![Page 127: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/127.jpg)
Минимальная сеть сортировки n=6 s=5
2
1
3
4
Шаги: 1 2 3 4 5
5
6
128
![Page 128: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/128.jpg)
Минимальные сети сортировки[Дональд Э.Кнут]
n=6 s=5 n=10 s=7 n=9 s=8
n=12 s=8n=16 s=9
129
![Page 129: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/129.jpg)
Обменная сортировка со слиянием8ми элементов
130
2log
log2
22
ppn
pn
O
![Page 130: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/130.jpg)
Сортировка блоковОДИНАКОВОГО РАЗМЕРА
2
1
3
4
Шаги: 1 2 3 4 5 6
5
6
131
![Page 131: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/131.jpg)
Алгоритм сортировки Среднее число операций
Пирамидальная 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
![Page 132: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/132.jpg)
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
![Page 133: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/133.jpg)
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
![Page 134: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/134.jpg)
// взаимодействие процессоров 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
![Page 135: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/135.jpg)
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
![Page 136: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/136.jpg)
• Рассмотрены основные методы построения параллельных алгоритмов
• Показано, как за счет использования неэффективных, но обладающих большим внутренним параллелизмом алгоритмов можно сокращать время решения задачи на многопроцессорной системе
• Рассмотрен ряд параллельных алгоритмов сортировки массивов и выполнено сравнение с «наилучшим» последовательным алгоритмом
Заключение
137
![Page 137: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/137.jpg)
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
![Page 138: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/138.jpg)
Литература…
Учебные курсы Интернет Университета Информационных технологий• Гергель В.П. Теория и практика параллельных вычислений. —
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
![Page 139: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/139.jpg)
Литература
Ресурсы Internet
• http://parallel.ru• http://top500.org• http://supercomputers.ru
140
![Page 140: якобовский - введение в параллельное программирование (1)](https://reader031.fdocument.pub/reader031/viewer/2022020720/556a79c9d8b42a7c758b4a46/html5/thumbnails/140.jpg)
Якобовский М.В., д.ф.-м.н., зав. сектором «Программного обеспечения многопроцессорных систем и вычислительных сетей» Института математического моделирования Российской академии наукe-mail: [email protected] web: http://lira.imamod.ru
Авторы
141