SlideShare a Scribd company logo
Анализ эффективности выполнения
алгоритма параллельной редукции
в языке Cray Chapel
http://cpct.sibsutis.ru/~apaznikov
Пазников Алексей Александрович
Институт физики полупроводников
им. А.В. Ржанова СО РАН
2
Глобальное разделённое адресное пространство (PGAS)
3
Параллельная редукция (reduce, reduction)
a1 a2 aDA[1:D] …
a1 a2 aDr = …
a3 a4 a5
a3  
2 0A[1:5]
2 0 3r =
1 3 1
1++ + 1+ = 7
4
 Все виды параллелизма
 Учёт локальности данных
 Низкоуровневое и высокоуровневое
управление параллелизмом
 Интуитивно понятный синтаксис
Язык Cray Chapel
1 use BlockDist;
2
3 proc main {
4 var Space = {1..n, 1..n};
5 var BlockSpace = Space dmapped
6 Block(boundingBox=Space);
7 var BA: [BlockSpace] real;
8
9 forall (i, j) in Space do
10 BA[i, j] = i * 10 + j;
11
12 var sum = + reduce BA;
13
14 writeln(“REDUCE: ”, sum);
15 }
5
Пример редукции в Cray Chapel
1 use BlockDist;
2
3 proc main {
4 var Space = {1..n, 1..n};
5 var BlockSpace = Space dmapped
6 Block(boundingBox=Space);
7 var BA: [BlockSpace] real;
8
9 forall (i, j) in Space do
10 BA[i, j] = i * 10 + j;
11
12 var sum = + reduce BA;
13
14 writeln(“REDUCE: ”, sum);
15 }
6
Пример редукции в Cray Chapel
1 use BlockDist;
2
3 proc main {
4 var Space = {1..n, 1..n};
5 var BlockSpace = Space dmapped
6 Block(boundingBox=Space);
7 var BA: [BlockSpace] real;
8
9 forall (i, j) in Space do
10 BA[i, j] = i * 10 + j;
11
12 var sum = + reduce BA;
13
14 writeln(“REDUCE: ”, sum);
15 }
7
Пример редукции в Cray Chapel
1 use BlockDist;
2
3 proc main {
4 var Space = {1..n, 1..n};
5 var BlockSpace = Space dmapped
6 Block(boundingBox=Space);
7 var BA: [BlockSpace] real;
8
9 forall (i, j) in Space do
10 BA[i, j] = i * 10 + j;
11
12 var sum = + reduce BA;
13
14 writeln(“REDUCE: ”, sum);
15 }
8
Пример редукции в Cray Chapel
9
Параллельная редукция (reduce, reduction)
10
Алгоритм редукции DefaultReduce
11
Алгоритм редукции DefaultReduce
Вычислительная трудоёмкость алгоритма DefaultReduce:
T = O(|A| / N + N)
12
Алгоритм редукции BlockReduce (I этап)
13
Алгоритм редукции BlockReduce (I этап)
Входные данные: A[1:D] – распределённый массив,
 – ассоциативная операция редукции.
Выходные данные: r – результат применения редукции для A.
1 coforall i in [1, 2, …, N] do // N – число вычислительных узлов
2 on i
3 SPLITDOMAIN(Ai, n) // Разбиение на n блоков – по числу ядер
4 coforall t in [1, 2, …, n] do
5 foreach x in Ait do
6 rit = rit  x
7 foreach t in [1, 2…, n] do
8 ri = ri  rit
14
Алгоритм редукции BlockReduce (I этап)
Входные данные: A[1:D] – распределённый массив,
 – ассоциативная операция редукции.
Выходные данные: r – результат применения редукции для A.
1 coforall i in [1, 2, …, N] do // N – число вычислительных узлов
2 on i
3 SPLITDOMAIN(Ai, n) // Разбиение на n блоков – по числу ядер
4 coforall t in [1, 2, …, n] do
5 foreach x in Ait do
6 rit = rit  x
7 foreach t in [1, 2…, n] do
8 ri = ri  rit
15
Алгоритм редукции BlockReduce (I этап)
Входные данные: A[1:D] – распределённый массив,
 – ассоциативная операция редукции.
Выходные данные: r – результат применения редукции для A.
1 coforall i in [1, 2, …, N] do // N – число вычислительных узлов
2 on i
3 SPLITDOMAIN(Ai, n) // Разбиение на n блоков – по числу ядер
4 coforall t in [1, 2, …, n] do
5 foreach x in Ait do
6 rit = rit  x
7 foreach t in [1, 2…, n] do
8 ri = ri  rit
16
Алгоритм редукции BlockReduce (I этап)
Входные данные: A[1:D] – распределённый массив,
 – ассоциативная операция редукции.
Выходные данные: r – результат применения редукции для A.
1 coforall i in [1, 2, …, N] do // N – число вычислительных узлов
2 on i
3 SPLITDOMAIN(Ai, n) // Разбиение на n блоков – по числу ядер
4 coforall t in [1, 2, …, n] do
5 foreach x in Ait do
6 rit = rit  x
7 foreach t in [1, 2…, n] do
8 ri = ri  rit
17
Алгоритм редукции BlockReduce (I этап)
Входные данные: A[1:D] – распределённый массив,
 – ассоциативная операция редукции.
Выходные данные: r – результат применения редукции для A.
1 coforall i in [1, 2, …, N] do // N – число вычислительных узлов
2 on i
3 SPLITDOMAIN(Ai, n) // Разбиение на n блоков – по числу ядер
4 coforall t in [1, 2, …, n] do
5 foreach x in Ait do
6 rit = rit  x
7 foreach t in [1, 2…, n] do
8 ri = ri  rit
18
Алгоритм редукции BlockReduce (I этап)
Входные данные: A[1:D] – распределённый массив,
 – ассоциативная операция редукции.
Выходные данные: r – результат применения редукции для A.
1 coforall i in [1, 2, …, N] do // N – число вычислительных узлов
2 on i
3 SPLITDOMAIN(Ai, n) // Разбиение на n блоков – по числу ядер
4 coforall t in [1, 2, …, n] do
5 foreach x in Ait do
6 rit = rit  x
7 foreach t in [1, 2…, n] do
8 ri = ri  rit
…
19
Алгоритм редукции BlockReduce (II этап)
a1 a2
A[1:D] …a3 a4 a5
r12 r34 r56
a6
r
r
12
34
BARRIER
BARRIER
r56
78
a7 a8
r78 …
…
   
 

20
Алгоритм редукции BlockReduce (II этап)
Входные данные: A[1:D] – распределённый массив,
 – ассоциативная операция редукции.
Выходные данные: r – результат применения редукции для A.
…
9 while N > 1 do
10 while i + 1 < N do
11 begin
12 on ri
13 ri = ri  ri + 1
14 i = i + 2
15 BARRIER([1, 2, …, N]) // Барьерная синхронизация потоков
16 REFRESH(N) // Обновление числа N ВУ
17 return r
21
Алгоритм редукции BlockReduce (II этап)
Входные данные: A[1:D] – распределённый массив,
 – ассоциативная операция редукции.
Выходные данные: r – результат применения редукции для A.
…
9 while N > 1 do
10 while i + 1 < N do
11 begin
12 on ri
13 ri = ri  ri + 1
14 i = i + 2
15 BARRIER([1, 2, …, N]) // Барьерная синхронизация потоков
16 REFRESH(N) // Обновление числа N ВУ
17 return r
22
Алгоритм редукции BlockReduce (II этап)
Входные данные: A[1:D] – распределённый массив,
 – ассоциативная операция редукции.
Выходные данные: r – результат применения редукции для A.
…
9 while N > 1 do
10 while i + 1 < N do
11 begin
12 on ri
13 ri = ri  ri + 1
14 i = i + 2
15 BARRIER([1, 2, …, N]) // Барьерная синхронизация потоков
16 REFRESH(N) // Обновление числа N ВУ
17 return r
23
Алгоритм редукции BlockReduce (II этап)
Входные данные: A[1:D] – распределённый массив,
 – ассоциативная операция редукции.
Выходные данные: r – результат применения редукции для A.
…
9 while N > 1 do
10 while i + 1 < N do
11 begin
12 on ri
13 ri = ri  ri + 1
14 i = i + 2
15 BARRIER([1, 2, …, N]) // Барьерная синхронизация потоков
16 REFRESH(N) // Обновление числа N ВУ
17 return r
24
Алгоритм редукции BlockReduce (II этап)
Входные данные: A[1:D] – распределённый массив,
 – ассоциативная операция редукции.
Выходные данные: r – результат применения редукции для A.
…
9 while N > 1 do
10 while i + 1 < N do
11 begin
12 on ri
13 ri = ri  ri + 1
14 i = i + 2
15 BARRIER([1, 2, …, N]) // Барьерная синхронизация потоков
16 REFRESH(N) // Обновление числа N ВУ
17 return r
25
Алгоритм редукции BlockReduce (II этап)
Входные данные: A[1:D] – распределённый массив,
 – ассоциативная операция редукции.
Выходные данные: r – результат применения редукции для A.
…
9 while N > 1 do
10 while i + 1 < N do
11 begin
12 on ri
13 ri = ri  ri + 1
14 i = i + 2
15 BARRIER([1, 2, …, N]) // Барьерная синхронизация потоков
16 REFRESH(N) // Обновление числа N ВУ
17 return r
Вычислительная трудоёмкость
алгоритма BlockReduce:
T = O(|A| / N + log(N))
compiler/AST/build.cpp
– вызов BlockReduce при генерации AST-дерева
modules/dists/BlockDist.chpl
modules/internal/ChapelArray.chpl
– функции получения локальной области
распределённого массива
modules/internal/ChapelReduceContr.chpl
modules/internal/FastReduce.chpl
– реализация алгоритма BlockReduce
https://bitbucket.org/apaznikov/chapel
Программная реализация
26
t, c
100 операций редукции массива A[1:D], 2 узла кластера Jet
27
Результаты экспериментов
D
BlockReduce DefReduce
28
Результаты экспериментов
100 операций редукции массива A[1:D], 4 узла кластера Jet
t, c
D
BlockReduce DefReduce
29
Результаты экспериментов
100 операций редукции массива A[1:D], 8 узлов кластера Jet
t, c
D
BlockReduce DefReduce
Программа miniMD, N узлов кластера Jet
30
Результаты экспериментов
t, c
N
BlockReduce DefReduce
31
Результаты экспериментов
Программа ptrans, N узлов кластера Jet
t, c
N
BlockReduce DefReduce
32
 Предложен алгоритм редукции
BlockReduce в PGAS-языках. Алгоритм
реализован в Cray Chapel.
 Сокращение времени выполнения
редукции на 5-10% на некотором
количестве узлов.
 Получен метод технической реализации
операции редукции.
Результаты
http://cpct.sibsutis.ru ЦПВТ СибГУТИ
Спасибо за внимание!
apaznikov@gmail.com Пазников А.А.
https://bitbucket.org/apaznikov/chapel
Количество операций get
Номерузла
Номер узла
Количествоопераций
8
7
6
5
4
3
2
1
1 2 3 4 5 6 7 8
34
Результаты профилирования DefaultReduce
50
40
30
20
10
0
35
Результаты профилирования DefaultReduce
Количество операций put
Номерузла
Номер узла
Количествоопераций
8
7
6
5
4
3
2
1
1 2 3 4 5 6 7 8
12000
10000
8000
6000
4000
2000
0
36
Результаты профилирования BlockReduce
Количество операций get
Номерузла
Номер узла
Количествоопераций
8
7
6
5
4
3
2
1
1 2 3 4 5 6 7 8
80
70
60
50
40
30
20
10
0
37
Результаты профилирования BlockReduce
Количество операций put
Номерузла
Номер узла
8
7
6
5
4
3
2
1
1 2 3 4 5 6 7 8
12000
10000
8000
6000
4000
2000
0
Количествоопераций

More Related Content

What's hot

JS Fest 2019/Autumn. Adam Leos. So why do you need to know Algorithms and Dat...
JS Fest 2019/Autumn. Adam Leos. So why do you need to know Algorithms and Dat...JS Fest 2019/Autumn. Adam Leos. So why do you need to know Algorithms and Dat...
JS Fest 2019/Autumn. Adam Leos. So why do you need to know Algorithms and Dat...JSFestUA
 
ПРИМЕНЕНИЕ ДИСКРЕТНОГО КОСИНУСНОГО ПРЕОБРАЗОВАНИЯ ДЛЯ ПОСТРОЕНИЯ ГОЛОГРАММЫ ...
ПРИМЕНЕНИЕ ДИСКРЕТНОГО КОСИНУСНОГО ПРЕОБРАЗОВАНИЯ  ДЛЯ ПОСТРОЕНИЯ ГОЛОГРАММЫ ...ПРИМЕНЕНИЕ ДИСКРЕТНОГО КОСИНУСНОГО ПРЕОБРАЗОВАНИЯ  ДЛЯ ПОСТРОЕНИЯ ГОЛОГРАММЫ ...
ПРИМЕНЕНИЕ ДИСКРЕТНОГО КОСИНУСНОГО ПРЕОБРАЗОВАНИЯ ДЛЯ ПОСТРОЕНИЯ ГОЛОГРАММЫ ...ITMO University
 
Как не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru Group
Как не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru GroupКак не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru Group
Как не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru GroupMail.ru Group
 
Семинар 3. Многопоточное программирование на OpenMP (часть 3)
Семинар 3. Многопоточное программирование на OpenMP (часть 3)Семинар 3. Многопоточное программирование на OpenMP (часть 3)
Семинар 3. Многопоточное программирование на OpenMP (часть 3)Mikhail Kurnosov
 
Лекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPЛекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPMikhail Kurnosov
 
ПВТ - осень 2014 - лекция 1 - Введение в параллельные вычисления
ПВТ - осень 2014 - лекция 1 - Введение в параллельные вычисленияПВТ - осень 2014 - лекция 1 - Введение в параллельные вычисления
ПВТ - осень 2014 - лекция 1 - Введение в параллельные вычисленияAlexey Paznikov
 
Python. Объектно-ориентированное программирование
Python. Объектно-ориентированное программирование Python. Объектно-ориентированное программирование
Python. Объектно-ориентированное программирование Theoretical mechanics department
 
Семинар 5. Многопоточное программирование на OpenMP (часть 5)
Семинар 5. Многопоточное программирование на OpenMP (часть 5)Семинар 5. Многопоточное программирование на OpenMP (часть 5)
Семинар 5. Многопоточное программирование на OpenMP (часть 5)Mikhail Kurnosov
 
разработка серверов и серверных приложений лекция №2
разработка серверов и серверных приложений лекция №2разработка серверов и серверных приложений лекция №2
разработка серверов и серверных приложений лекция №2Eugeniy Tyumentcev
 
D-кучи и их применение
D-кучи и их применениеD-кучи и их применение
D-кучи и их применениеDEVTYPE
 
07 - Hadoop. Решение задач с помощью MapReduce
07 - Hadoop. Решение задач с помощью MapReduce07 - Hadoop. Решение задач с помощью MapReduce
07 - Hadoop. Решение задач с помощью MapReduceRoman Brovko
 
Защита информации семинар №8
Защита информации семинар №8Защита информации семинар №8
Защита информации семинар №8Alexander Kolybelnikov
 
Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)Technopark
 
О-символика
О-символикаО-символика
О-символикаDEVTYPE
 
Лекция №15. Методы программирования. Предмет "Структуры и алгоритмы обработки...
Лекция №15. Методы программирования. Предмет "Структуры и алгоритмы обработки...Лекция №15. Методы программирования. Предмет "Структуры и алгоритмы обработки...
Лекция №15. Методы программирования. Предмет "Структуры и алгоритмы обработки...Nikolay Grebenshikov
 
Лекция 3. Виртуальные топологии в MPI. Параллельные алгоритмы в стандарте MPI...
Лекция 3. Виртуальные топологии в MPI. Параллельные алгоритмы в стандарте MPI...Лекция 3. Виртуальные топологии в MPI. Параллельные алгоритмы в стандарте MPI...
Лекция 3. Виртуальные топологии в MPI. Параллельные алгоритмы в стандарте MPI...Alexey Paznikov
 

What's hot (20)

JS Fest 2019/Autumn. Adam Leos. So why do you need to know Algorithms and Dat...
JS Fest 2019/Autumn. Adam Leos. So why do you need to know Algorithms and Dat...JS Fest 2019/Autumn. Adam Leos. So why do you need to know Algorithms and Dat...
JS Fest 2019/Autumn. Adam Leos. So why do you need to know Algorithms and Dat...
 
ПРИМЕНЕНИЕ ДИСКРЕТНОГО КОСИНУСНОГО ПРЕОБРАЗОВАНИЯ ДЛЯ ПОСТРОЕНИЯ ГОЛОГРАММЫ ...
ПРИМЕНЕНИЕ ДИСКРЕТНОГО КОСИНУСНОГО ПРЕОБРАЗОВАНИЯ  ДЛЯ ПОСТРОЕНИЯ ГОЛОГРАММЫ ...ПРИМЕНЕНИЕ ДИСКРЕТНОГО КОСИНУСНОГО ПРЕОБРАЗОВАНИЯ  ДЛЯ ПОСТРОЕНИЯ ГОЛОГРАММЫ ...
ПРИМЕНЕНИЕ ДИСКРЕТНОГО КОСИНУСНОГО ПРЕОБРАЗОВАНИЯ ДЛЯ ПОСТРОЕНИЯ ГОЛОГРАММЫ ...
 
Как не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru Group
Как не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru GroupКак не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru Group
Как не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru Group
 
ФИЛП
ФИЛПФИЛП
ФИЛП
 
Семинар 3. Многопоточное программирование на OpenMP (часть 3)
Семинар 3. Многопоточное программирование на OpenMP (часть 3)Семинар 3. Многопоточное программирование на OpenMP (часть 3)
Семинар 3. Многопоточное программирование на OpenMP (часть 3)
 
Основы SciPy
Основы SciPyОсновы SciPy
Основы SciPy
 
Algo 01 part01
Algo 01 part01Algo 01 part01
Algo 01 part01
 
Лекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPЛекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMP
 
ПВТ - осень 2014 - лекция 1 - Введение в параллельные вычисления
ПВТ - осень 2014 - лекция 1 - Введение в параллельные вычисленияПВТ - осень 2014 - лекция 1 - Введение в параллельные вычисления
ПВТ - осень 2014 - лекция 1 - Введение в параллельные вычисления
 
Python. Объектно-ориентированное программирование
Python. Объектно-ориентированное программирование Python. Объектно-ориентированное программирование
Python. Объектно-ориентированное программирование
 
Семинар 5. Многопоточное программирование на OpenMP (часть 5)
Семинар 5. Многопоточное программирование на OpenMP (часть 5)Семинар 5. Многопоточное программирование на OpenMP (часть 5)
Семинар 5. Многопоточное программирование на OpenMP (часть 5)
 
разработка серверов и серверных приложений лекция №2
разработка серверов и серверных приложений лекция №2разработка серверов и серверных приложений лекция №2
разработка серверов и серверных приложений лекция №2
 
D-кучи и их применение
D-кучи и их применениеD-кучи и их применение
D-кучи и их применение
 
07 - Hadoop. Решение задач с помощью MapReduce
07 - Hadoop. Решение задач с помощью MapReduce07 - Hadoop. Решение задач с помощью MapReduce
07 - Hadoop. Решение задач с помощью MapReduce
 
Защита информации семинар №8
Защита информации семинар №8Защита информации семинар №8
Защита информации семинар №8
 
Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)
 
OpenACC short review
OpenACC short reviewOpenACC short review
OpenACC short review
 
О-символика
О-символикаО-символика
О-символика
 
Лекция №15. Методы программирования. Предмет "Структуры и алгоритмы обработки...
Лекция №15. Методы программирования. Предмет "Структуры и алгоритмы обработки...Лекция №15. Методы программирования. Предмет "Структуры и алгоритмы обработки...
Лекция №15. Методы программирования. Предмет "Структуры и алгоритмы обработки...
 
Лекция 3. Виртуальные топологии в MPI. Параллельные алгоритмы в стандарте MPI...
Лекция 3. Виртуальные топологии в MPI. Параллельные алгоритмы в стандарте MPI...Лекция 3. Виртуальные топологии в MPI. Параллельные алгоритмы в стандарте MPI...
Лекция 3. Виртуальные топологии в MPI. Параллельные алгоритмы в стандарте MPI...
 

Similar to Анализ эффективности выполнения алгоритма параллельной редукции в языке Cray Chapel (конференция ICAM, 2014)

Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...
Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...
Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...Alexey Paznikov
 
чернякова г.в.
чернякова г.в.чернякова г.в.
чернякова г.в.sharikdp
 
Лекция 11. Методы разработки алгоритмов
Лекция 11. Методы разработки алгоритмовЛекция 11. Методы разработки алгоритмов
Лекция 11. Методы разработки алгоритмовMikhail Kurnosov
 
Лекция 11: Методы разработки алгоритмов
Лекция 11: Методы разработки алгоритмовЛекция 11: Методы разработки алгоритмов
Лекция 11: Методы разработки алгоритмовMikhail Kurnosov
 
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...Yandex
 
Лекция 13: Трудноразрешимые задачи. NP-полнота.
Лекция 13: Трудноразрешимые задачи. NP-полнота.Лекция 13: Трудноразрешимые задачи. NP-полнота.
Лекция 13: Трудноразрешимые задачи. NP-полнота.Mikhail Kurnosov
 
ПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программирования
ПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программированияПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программирования
ПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программированияAlexey Paznikov
 
20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonovComputer Science Club
 
Tech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU
 
Как приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVMКак приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVMTech Talks @NSU
 
Лекция 2: Абстрактные типы данных. Алгоритмы сортировки
Лекция 2: Абстрактные типы данных. Алгоритмы сортировкиЛекция 2: Абстрактные типы данных. Алгоритмы сортировки
Лекция 2: Абстрактные типы данных. Алгоритмы сортировкиMikhail Kurnosov
 
PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 3...
PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 3...PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 3...
PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 3...pgdayrussia
 
Address Sanitizer или как сделать программы на c/с++ надежнее и безопаснее (К...
Address Sanitizer или как сделать программы на c/с++ надежнее и безопаснее (К...Address Sanitizer или как сделать программы на c/с++ надежнее и безопаснее (К...
Address Sanitizer или как сделать программы на c/с++ надежнее и безопаснее (К...Ontico
 
Pyton – пробуем функциональный стиль
Pyton – пробуем функциональный стильPyton – пробуем функциональный стиль
Pyton – пробуем функциональный стильPython Meetup
 
Сложности микробенчмаркинга
Сложности микробенчмаркингаСложности микробенчмаркинга
Сложности микробенчмаркингаAndrey Akinshin
 
Лекция 8. Intel Threading Building Blocks
Лекция 8. Intel Threading Building BlocksЛекция 8. Intel Threading Building Blocks
Лекция 8. Intel Threading Building BlocksMikhail Kurnosov
 
Performance optimization of virtual network infrastructure (RUS, OpenStack Me...
Performance optimization of virtual network infrastructure (RUS, OpenStack Me...Performance optimization of virtual network infrastructure (RUS, OpenStack Me...
Performance optimization of virtual network infrastructure (RUS, OpenStack Me...Vadim Ponomarev
 

Similar to Анализ эффективности выполнения алгоритма параллельной редукции в языке Cray Chapel (конференция ICAM, 2014) (20)

Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...
Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...
Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...
 
чернякова г.в.
чернякова г.в.чернякова г.в.
чернякова г.в.
 
Лекция 11. Методы разработки алгоритмов
Лекция 11. Методы разработки алгоритмовЛекция 11. Методы разработки алгоритмов
Лекция 11. Методы разработки алгоритмов
 
Лекция 11: Методы разработки алгоритмов
Лекция 11: Методы разработки алгоритмовЛекция 11: Методы разработки алгоритмов
Лекция 11: Методы разработки алгоритмов
 
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
 
Лекция 13: Трудноразрешимые задачи. NP-полнота.
Лекция 13: Трудноразрешимые задачи. NP-полнота.Лекция 13: Трудноразрешимые задачи. NP-полнота.
Лекция 13: Трудноразрешимые задачи. NP-полнота.
 
ПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программирования
ПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программированияПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программирования
ПВТ - весна 2015 - Лекция 4. Шаблоны многопоточного программирования
 
20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov
 
Tech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVM
 
Как приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVMКак приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVM
 
Лекция 2: Абстрактные типы данных. Алгоритмы сортировки
Лекция 2: Абстрактные типы данных. Алгоритмы сортировкиЛекция 2: Абстрактные типы данных. Алгоритмы сортировки
Лекция 2: Абстрактные типы данных. Алгоритмы сортировки
 
PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 3...
PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 3...PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 3...
PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 3...
 
Address Sanitizer или как сделать программы на c/с++ надежнее и безопаснее (К...
Address Sanitizer или как сделать программы на c/с++ надежнее и безопаснее (К...Address Sanitizer или как сделать программы на c/с++ надежнее и безопаснее (К...
Address Sanitizer или как сделать программы на c/с++ надежнее и безопаснее (К...
 
Pyton – пробуем функциональный стиль
Pyton – пробуем функциональный стильPyton – пробуем функциональный стиль
Pyton – пробуем функциональный стиль
 
Progr labrab-4-2013-c++
Progr labrab-4-2013-c++Progr labrab-4-2013-c++
Progr labrab-4-2013-c++
 
Сложности микробенчмаркинга
Сложности микробенчмаркингаСложности микробенчмаркинга
Сложности микробенчмаркинга
 
Лекция 8. Intel Threading Building Blocks
Лекция 8. Intel Threading Building BlocksЛекция 8. Intel Threading Building Blocks
Лекция 8. Intel Threading Building Blocks
 
Performance optimization of virtual network infrastructure (RUS, OpenStack Me...
Performance optimization of virtual network infrastructure (RUS, OpenStack Me...Performance optimization of virtual network infrastructure (RUS, OpenStack Me...
Performance optimization of virtual network infrastructure (RUS, OpenStack Me...
 
Java8. Innovations
Java8. InnovationsJava8. Innovations
Java8. Innovations
 
введение в Gpu
введение в Gpuвведение в Gpu
введение в Gpu
 

More from Alexey Paznikov

Лекция 6. Параллельная сортировка. Алгоритмы комбинаторного поиска. Параллель...
Лекция 6. Параллельная сортировка. Алгоритмы комбинаторного поиска. Параллель...Лекция 6. Параллельная сортировка. Алгоритмы комбинаторного поиска. Параллель...
Лекция 6. Параллельная сортировка. Алгоритмы комбинаторного поиска. Параллель...Alexey Paznikov
 
Лекция 5. Метод конечных разностей (параллельные алгоритмы в стандарте MPI)
Лекция 5. Метод конечных разностей (параллельные алгоритмы в стандарте MPI)Лекция 5. Метод конечных разностей (параллельные алгоритмы в стандарте MPI)
Лекция 5. Метод конечных разностей (параллельные алгоритмы в стандарте MPI)Alexey Paznikov
 
Лекция 4. Производные типы данных в стандарте MPI
Лекция 4. Производные типы данных в стандарте MPIЛекция 4. Производные типы данных в стандарте MPI
Лекция 4. Производные типы данных в стандарте MPIAlexey Paznikov
 
Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...
Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...
Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...Alexey Paznikov
 
Лекция 1. Основные понятия стандарта MPI. Дифференцированные обмены
Лекция 1. Основные понятия стандарта MPI. Дифференцированные обменыЛекция 1. Основные понятия стандарта MPI. Дифференцированные обмены
Лекция 1. Основные понятия стандарта MPI. Дифференцированные обменыAlexey Paznikov
 
ПВТ - весна 2015 - Лекция 8. Многопоточное программирование без использования...
ПВТ - весна 2015 - Лекция 8. Многопоточное программирование без использования...ПВТ - весна 2015 - Лекция 8. Многопоточное программирование без использования...
ПВТ - весна 2015 - Лекция 8. Многопоточное программирование без использования...Alexey Paznikov
 
ПВТ - весна 2015 - Лекция 7. Модель памяти С++. Внеочередное выполнение инстр...
ПВТ - весна 2015 - Лекция 7. Модель памяти С++. Внеочередное выполнение инстр...ПВТ - весна 2015 - Лекция 7. Модель памяти С++. Внеочередное выполнение инстр...
ПВТ - весна 2015 - Лекция 7. Модель памяти С++. Внеочередное выполнение инстр...Alexey Paznikov
 
ПВТ - весна 2015 - Лекция 6. Разработка параллельных структур данных на основ...
ПВТ - весна 2015 - Лекция 6. Разработка параллельных структур данных на основ...ПВТ - весна 2015 - Лекция 6. Разработка параллельных структур данных на основ...
ПВТ - весна 2015 - Лекция 6. Разработка параллельных структур данных на основ...Alexey Paznikov
 
ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...
ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...
ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...Alexey Paznikov
 
ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...
ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...
ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...Alexey Paznikov
 
ПВТ - весна 2015 - Лекция 2. POSIX Threads. Основные понятия многопоточного п...
ПВТ - весна 2015 - Лекция 2. POSIX Threads. Основные понятия многопоточного п...ПВТ - весна 2015 - Лекция 2. POSIX Threads. Основные понятия многопоточного п...
ПВТ - весна 2015 - Лекция 2. POSIX Threads. Основные понятия многопоточного п...Alexey Paznikov
 
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...Alexey Paznikov
 
ПВТ - весна 2015 - Лекция 0. Описание курса
ПВТ - весна 2015 - Лекция 0. Описание курсаПВТ - весна 2015 - Лекция 0. Описание курса
ПВТ - весна 2015 - Лекция 0. Описание курсаAlexey Paznikov
 
ПВТ - осень 2014 - Лекция 7. Многопоточное программирование без блокировок. М...
ПВТ - осень 2014 - Лекция 7. Многопоточное программирование без блокировок. М...ПВТ - осень 2014 - Лекция 7. Многопоточное программирование без блокировок. М...
ПВТ - осень 2014 - Лекция 7. Многопоточное программирование без блокировок. М...Alexey Paznikov
 
ПВТ - осень 2014 - Лекция 6 - Атомарные операции. Внеочередное выполнение инс...
ПВТ - осень 2014 - Лекция 6 - Атомарные операции. Внеочередное выполнение инс...ПВТ - осень 2014 - Лекция 6 - Атомарные операции. Внеочередное выполнение инс...
ПВТ - осень 2014 - Лекция 6 - Атомарные операции. Внеочередное выполнение инс...Alexey Paznikov
 
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++. Р...
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++.   Р...ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++.   Р...
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++. Р...Alexey Paznikov
 
ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...
ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...
ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...Alexey Paznikov
 
ПВТ - осень 2014 - Лекция 3 - Стандарт POSIX Threads
ПВТ - осень 2014 - Лекция 3 - Стандарт POSIX ThreadsПВТ - осень 2014 - Лекция 3 - Стандарт POSIX Threads
ПВТ - осень 2014 - Лекция 3 - Стандарт POSIX ThreadsAlexey Paznikov
 
ПВТ - осень 2014 - Лекция 2 - Архитектура вычислительных систем с общей памятью
ПВТ - осень 2014 - Лекция 2 - Архитектура вычислительных систем с общей памятьюПВТ - осень 2014 - Лекция 2 - Архитектура вычислительных систем с общей памятью
ПВТ - осень 2014 - Лекция 2 - Архитектура вычислительных систем с общей памятьюAlexey Paznikov
 
ПВТ - осень 2014 - лекция 1а - Описание курса
ПВТ - осень 2014 - лекция 1а - Описание курсаПВТ - осень 2014 - лекция 1а - Описание курса
ПВТ - осень 2014 - лекция 1а - Описание курсаAlexey Paznikov
 

More from Alexey Paznikov (20)

Лекция 6. Параллельная сортировка. Алгоритмы комбинаторного поиска. Параллель...
Лекция 6. Параллельная сортировка. Алгоритмы комбинаторного поиска. Параллель...Лекция 6. Параллельная сортировка. Алгоритмы комбинаторного поиска. Параллель...
Лекция 6. Параллельная сортировка. Алгоритмы комбинаторного поиска. Параллель...
 
Лекция 5. Метод конечных разностей (параллельные алгоритмы в стандарте MPI)
Лекция 5. Метод конечных разностей (параллельные алгоритмы в стандарте MPI)Лекция 5. Метод конечных разностей (параллельные алгоритмы в стандарте MPI)
Лекция 5. Метод конечных разностей (параллельные алгоритмы в стандарте MPI)
 
Лекция 4. Производные типы данных в стандарте MPI
Лекция 4. Производные типы данных в стандарте MPIЛекция 4. Производные типы данных в стандарте MPI
Лекция 4. Производные типы данных в стандарте MPI
 
Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...
Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...
Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...
 
Лекция 1. Основные понятия стандарта MPI. Дифференцированные обмены
Лекция 1. Основные понятия стандарта MPI. Дифференцированные обменыЛекция 1. Основные понятия стандарта MPI. Дифференцированные обмены
Лекция 1. Основные понятия стандарта MPI. Дифференцированные обмены
 
ПВТ - весна 2015 - Лекция 8. Многопоточное программирование без использования...
ПВТ - весна 2015 - Лекция 8. Многопоточное программирование без использования...ПВТ - весна 2015 - Лекция 8. Многопоточное программирование без использования...
ПВТ - весна 2015 - Лекция 8. Многопоточное программирование без использования...
 
ПВТ - весна 2015 - Лекция 7. Модель памяти С++. Внеочередное выполнение инстр...
ПВТ - весна 2015 - Лекция 7. Модель памяти С++. Внеочередное выполнение инстр...ПВТ - весна 2015 - Лекция 7. Модель памяти С++. Внеочередное выполнение инстр...
ПВТ - весна 2015 - Лекция 7. Модель памяти С++. Внеочередное выполнение инстр...
 
ПВТ - весна 2015 - Лекция 6. Разработка параллельных структур данных на основ...
ПВТ - весна 2015 - Лекция 6. Разработка параллельных структур данных на основ...ПВТ - весна 2015 - Лекция 6. Разработка параллельных структур данных на основ...
ПВТ - весна 2015 - Лекция 6. Разработка параллельных структур данных на основ...
 
ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...
ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...
ПВТ - весна 2015 - Лекция 5. Многопоточное программирование в С++. Синхрониза...
 
ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...
ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...
ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...
 
ПВТ - весна 2015 - Лекция 2. POSIX Threads. Основные понятия многопоточного п...
ПВТ - весна 2015 - Лекция 2. POSIX Threads. Основные понятия многопоточного п...ПВТ - весна 2015 - Лекция 2. POSIX Threads. Основные понятия многопоточного п...
ПВТ - весна 2015 - Лекция 2. POSIX Threads. Основные понятия многопоточного п...
 
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
 
ПВТ - весна 2015 - Лекция 0. Описание курса
ПВТ - весна 2015 - Лекция 0. Описание курсаПВТ - весна 2015 - Лекция 0. Описание курса
ПВТ - весна 2015 - Лекция 0. Описание курса
 
ПВТ - осень 2014 - Лекция 7. Многопоточное программирование без блокировок. М...
ПВТ - осень 2014 - Лекция 7. Многопоточное программирование без блокировок. М...ПВТ - осень 2014 - Лекция 7. Многопоточное программирование без блокировок. М...
ПВТ - осень 2014 - Лекция 7. Многопоточное программирование без блокировок. М...
 
ПВТ - осень 2014 - Лекция 6 - Атомарные операции. Внеочередное выполнение инс...
ПВТ - осень 2014 - Лекция 6 - Атомарные операции. Внеочередное выполнение инс...ПВТ - осень 2014 - Лекция 6 - Атомарные операции. Внеочередное выполнение инс...
ПВТ - осень 2014 - Лекция 6 - Атомарные операции. Внеочередное выполнение инс...
 
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++. Р...
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++.   Р...ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++.   Р...
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++. Р...
 
ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...
ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...
ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...
 
ПВТ - осень 2014 - Лекция 3 - Стандарт POSIX Threads
ПВТ - осень 2014 - Лекция 3 - Стандарт POSIX ThreadsПВТ - осень 2014 - Лекция 3 - Стандарт POSIX Threads
ПВТ - осень 2014 - Лекция 3 - Стандарт POSIX Threads
 
ПВТ - осень 2014 - Лекция 2 - Архитектура вычислительных систем с общей памятью
ПВТ - осень 2014 - Лекция 2 - Архитектура вычислительных систем с общей памятьюПВТ - осень 2014 - Лекция 2 - Архитектура вычислительных систем с общей памятью
ПВТ - осень 2014 - Лекция 2 - Архитектура вычислительных систем с общей памятью
 
ПВТ - осень 2014 - лекция 1а - Описание курса
ПВТ - осень 2014 - лекция 1а - Описание курсаПВТ - осень 2014 - лекция 1а - Описание курса
ПВТ - осень 2014 - лекция 1а - Описание курса
 

Анализ эффективности выполнения алгоритма параллельной редукции в языке Cray Chapel (конференция ICAM, 2014)

  • 1. Анализ эффективности выполнения алгоритма параллельной редукции в языке Cray Chapel http://cpct.sibsutis.ru/~apaznikov Пазников Алексей Александрович Институт физики полупроводников им. А.В. Ржанова СО РАН
  • 3. 3 Параллельная редукция (reduce, reduction) a1 a2 aDA[1:D] … a1 a2 aDr = … a3 a4 a5 a3   2 0A[1:5] 2 0 3r = 1 3 1 1++ + 1+ = 7
  • 4. 4  Все виды параллелизма  Учёт локальности данных  Низкоуровневое и высокоуровневое управление параллелизмом  Интуитивно понятный синтаксис Язык Cray Chapel
  • 5. 1 use BlockDist; 2 3 proc main { 4 var Space = {1..n, 1..n}; 5 var BlockSpace = Space dmapped 6 Block(boundingBox=Space); 7 var BA: [BlockSpace] real; 8 9 forall (i, j) in Space do 10 BA[i, j] = i * 10 + j; 11 12 var sum = + reduce BA; 13 14 writeln(“REDUCE: ”, sum); 15 } 5 Пример редукции в Cray Chapel
  • 6. 1 use BlockDist; 2 3 proc main { 4 var Space = {1..n, 1..n}; 5 var BlockSpace = Space dmapped 6 Block(boundingBox=Space); 7 var BA: [BlockSpace] real; 8 9 forall (i, j) in Space do 10 BA[i, j] = i * 10 + j; 11 12 var sum = + reduce BA; 13 14 writeln(“REDUCE: ”, sum); 15 } 6 Пример редукции в Cray Chapel
  • 7. 1 use BlockDist; 2 3 proc main { 4 var Space = {1..n, 1..n}; 5 var BlockSpace = Space dmapped 6 Block(boundingBox=Space); 7 var BA: [BlockSpace] real; 8 9 forall (i, j) in Space do 10 BA[i, j] = i * 10 + j; 11 12 var sum = + reduce BA; 13 14 writeln(“REDUCE: ”, sum); 15 } 7 Пример редукции в Cray Chapel
  • 8. 1 use BlockDist; 2 3 proc main { 4 var Space = {1..n, 1..n}; 5 var BlockSpace = Space dmapped 6 Block(boundingBox=Space); 7 var BA: [BlockSpace] real; 8 9 forall (i, j) in Space do 10 BA[i, j] = i * 10 + j; 11 12 var sum = + reduce BA; 13 14 writeln(“REDUCE: ”, sum); 15 } 8 Пример редукции в Cray Chapel
  • 11. 11 Алгоритм редукции DefaultReduce Вычислительная трудоёмкость алгоритма DefaultReduce: T = O(|A| / N + N)
  • 13. 13 Алгоритм редукции BlockReduce (I этап) Входные данные: A[1:D] – распределённый массив,  – ассоциативная операция редукции. Выходные данные: r – результат применения редукции для A. 1 coforall i in [1, 2, …, N] do // N – число вычислительных узлов 2 on i 3 SPLITDOMAIN(Ai, n) // Разбиение на n блоков – по числу ядер 4 coforall t in [1, 2, …, n] do 5 foreach x in Ait do 6 rit = rit  x 7 foreach t in [1, 2…, n] do 8 ri = ri  rit
  • 14. 14 Алгоритм редукции BlockReduce (I этап) Входные данные: A[1:D] – распределённый массив,  – ассоциативная операция редукции. Выходные данные: r – результат применения редукции для A. 1 coforall i in [1, 2, …, N] do // N – число вычислительных узлов 2 on i 3 SPLITDOMAIN(Ai, n) // Разбиение на n блоков – по числу ядер 4 coforall t in [1, 2, …, n] do 5 foreach x in Ait do 6 rit = rit  x 7 foreach t in [1, 2…, n] do 8 ri = ri  rit
  • 15. 15 Алгоритм редукции BlockReduce (I этап) Входные данные: A[1:D] – распределённый массив,  – ассоциативная операция редукции. Выходные данные: r – результат применения редукции для A. 1 coforall i in [1, 2, …, N] do // N – число вычислительных узлов 2 on i 3 SPLITDOMAIN(Ai, n) // Разбиение на n блоков – по числу ядер 4 coforall t in [1, 2, …, n] do 5 foreach x in Ait do 6 rit = rit  x 7 foreach t in [1, 2…, n] do 8 ri = ri  rit
  • 16. 16 Алгоритм редукции BlockReduce (I этап) Входные данные: A[1:D] – распределённый массив,  – ассоциативная операция редукции. Выходные данные: r – результат применения редукции для A. 1 coforall i in [1, 2, …, N] do // N – число вычислительных узлов 2 on i 3 SPLITDOMAIN(Ai, n) // Разбиение на n блоков – по числу ядер 4 coforall t in [1, 2, …, n] do 5 foreach x in Ait do 6 rit = rit  x 7 foreach t in [1, 2…, n] do 8 ri = ri  rit
  • 17. 17 Алгоритм редукции BlockReduce (I этап) Входные данные: A[1:D] – распределённый массив,  – ассоциативная операция редукции. Выходные данные: r – результат применения редукции для A. 1 coforall i in [1, 2, …, N] do // N – число вычислительных узлов 2 on i 3 SPLITDOMAIN(Ai, n) // Разбиение на n блоков – по числу ядер 4 coforall t in [1, 2, …, n] do 5 foreach x in Ait do 6 rit = rit  x 7 foreach t in [1, 2…, n] do 8 ri = ri  rit
  • 18. 18 Алгоритм редукции BlockReduce (I этап) Входные данные: A[1:D] – распределённый массив,  – ассоциативная операция редукции. Выходные данные: r – результат применения редукции для A. 1 coforall i in [1, 2, …, N] do // N – число вычислительных узлов 2 on i 3 SPLITDOMAIN(Ai, n) // Разбиение на n блоков – по числу ядер 4 coforall t in [1, 2, …, n] do 5 foreach x in Ait do 6 rit = rit  x 7 foreach t in [1, 2…, n] do 8 ri = ri  rit
  • 19. … 19 Алгоритм редукции BlockReduce (II этап) a1 a2 A[1:D] …a3 a4 a5 r12 r34 r56 a6 r r 12 34 BARRIER BARRIER r56 78 a7 a8 r78 … …       
  • 20. 20 Алгоритм редукции BlockReduce (II этап) Входные данные: A[1:D] – распределённый массив,  – ассоциативная операция редукции. Выходные данные: r – результат применения редукции для A. … 9 while N > 1 do 10 while i + 1 < N do 11 begin 12 on ri 13 ri = ri  ri + 1 14 i = i + 2 15 BARRIER([1, 2, …, N]) // Барьерная синхронизация потоков 16 REFRESH(N) // Обновление числа N ВУ 17 return r
  • 21. 21 Алгоритм редукции BlockReduce (II этап) Входные данные: A[1:D] – распределённый массив,  – ассоциативная операция редукции. Выходные данные: r – результат применения редукции для A. … 9 while N > 1 do 10 while i + 1 < N do 11 begin 12 on ri 13 ri = ri  ri + 1 14 i = i + 2 15 BARRIER([1, 2, …, N]) // Барьерная синхронизация потоков 16 REFRESH(N) // Обновление числа N ВУ 17 return r
  • 22. 22 Алгоритм редукции BlockReduce (II этап) Входные данные: A[1:D] – распределённый массив,  – ассоциативная операция редукции. Выходные данные: r – результат применения редукции для A. … 9 while N > 1 do 10 while i + 1 < N do 11 begin 12 on ri 13 ri = ri  ri + 1 14 i = i + 2 15 BARRIER([1, 2, …, N]) // Барьерная синхронизация потоков 16 REFRESH(N) // Обновление числа N ВУ 17 return r
  • 23. 23 Алгоритм редукции BlockReduce (II этап) Входные данные: A[1:D] – распределённый массив,  – ассоциативная операция редукции. Выходные данные: r – результат применения редукции для A. … 9 while N > 1 do 10 while i + 1 < N do 11 begin 12 on ri 13 ri = ri  ri + 1 14 i = i + 2 15 BARRIER([1, 2, …, N]) // Барьерная синхронизация потоков 16 REFRESH(N) // Обновление числа N ВУ 17 return r
  • 24. 24 Алгоритм редукции BlockReduce (II этап) Входные данные: A[1:D] – распределённый массив,  – ассоциативная операция редукции. Выходные данные: r – результат применения редукции для A. … 9 while N > 1 do 10 while i + 1 < N do 11 begin 12 on ri 13 ri = ri  ri + 1 14 i = i + 2 15 BARRIER([1, 2, …, N]) // Барьерная синхронизация потоков 16 REFRESH(N) // Обновление числа N ВУ 17 return r
  • 25. 25 Алгоритм редукции BlockReduce (II этап) Входные данные: A[1:D] – распределённый массив,  – ассоциативная операция редукции. Выходные данные: r – результат применения редукции для A. … 9 while N > 1 do 10 while i + 1 < N do 11 begin 12 on ri 13 ri = ri  ri + 1 14 i = i + 2 15 BARRIER([1, 2, …, N]) // Барьерная синхронизация потоков 16 REFRESH(N) // Обновление числа N ВУ 17 return r Вычислительная трудоёмкость алгоритма BlockReduce: T = O(|A| / N + log(N))
  • 26. compiler/AST/build.cpp – вызов BlockReduce при генерации AST-дерева modules/dists/BlockDist.chpl modules/internal/ChapelArray.chpl – функции получения локальной области распределённого массива modules/internal/ChapelReduceContr.chpl modules/internal/FastReduce.chpl – реализация алгоритма BlockReduce https://bitbucket.org/apaznikov/chapel Программная реализация 26
  • 27. t, c 100 операций редукции массива A[1:D], 2 узла кластера Jet 27 Результаты экспериментов D BlockReduce DefReduce
  • 28. 28 Результаты экспериментов 100 операций редукции массива A[1:D], 4 узла кластера Jet t, c D BlockReduce DefReduce
  • 29. 29 Результаты экспериментов 100 операций редукции массива A[1:D], 8 узлов кластера Jet t, c D BlockReduce DefReduce
  • 30. Программа miniMD, N узлов кластера Jet 30 Результаты экспериментов t, c N BlockReduce DefReduce
  • 31. 31 Результаты экспериментов Программа ptrans, N узлов кластера Jet t, c N BlockReduce DefReduce
  • 32. 32  Предложен алгоритм редукции BlockReduce в PGAS-языках. Алгоритм реализован в Cray Chapel.  Сокращение времени выполнения редукции на 5-10% на некотором количестве узлов.  Получен метод технической реализации операции редукции. Результаты
  • 33. http://cpct.sibsutis.ru ЦПВТ СибГУТИ Спасибо за внимание! apaznikov@gmail.com Пазников А.А. https://bitbucket.org/apaznikov/chapel
  • 34. Количество операций get Номерузла Номер узла Количествоопераций 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 34 Результаты профилирования DefaultReduce 50 40 30 20 10 0
  • 35. 35 Результаты профилирования DefaultReduce Количество операций put Номерузла Номер узла Количествоопераций 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 12000 10000 8000 6000 4000 2000 0
  • 36. 36 Результаты профилирования BlockReduce Количество операций get Номерузла Номер узла Количествоопераций 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 80 70 60 50 40 30 20 10 0
  • 37. 37 Результаты профилирования BlockReduce Количество операций put Номерузла Номер узла 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 12000 10000 8000 6000 4000 2000 0 Количествоопераций