SlideShare ist ein Scribd-Unternehmen logo
1 von 78
Downloaden Sie, um offline zu lesen
Кулагин И.И., ПазниковА.А., КурносовМ.Г. 
Институт физики полупроводников им. А.В. РжановаСО РАН 
Оптимизация информационных обменов в параллельных PGAS-программах 
3-я Всероссийская научно-техническая конференция «Суперкомпьютерные технологии» (СКТ-2014) 
29 сентября –4 октября 2014 г., с. Дивноморское
Общая память(PThreads, OpenMP, Cilk) 
Распределённая память(MPI) 
P 
P 
P 
Разделяемое общее адресное пространство (Partitioned Global Address Space –PGAS) 
P 
M 
Задача (процесс, поток) 
Память (адресное пространство) 
Доступ к памяти 
Передача сообщений 
•X10 
•Chapel 
•UPC 
•Titanium 
•Co-array Fortran 
•HPF 
Программные модели вычислительных систем 
2 
P 
M 
P 
P 
P 
M 
P 
M 
P 
M
3 
Глобальное разделённое адресное пространство (PGAS) 
HPF, Co-array Fortran, Titanium, UPC, IBM X10, Cray Chapel
Основные программные конструкции PGAS-языков 
4 
begin S–асинхронное выполнение инструкций Sв отдельном потоке на вычислительном узле, с которого вызвана конструкция 
on iS–выполнение инструкций Sна узле i 
on x S–выполнение инструкций Sна том узле, в памяти которого находится объект x 
coforallS–выполнение каждой итерации тела Sцикла в независимом потоке 
sync T–синхронизациягруппы потоков T
Основные программные конструкции PGAS-языков 
5 
begin S–асинхронное выполнение инструкций Sв отдельном потоке на вычислительном узле, с которого вызвана конструкция 
Вычислительныйузел i 
begin { 
stmt1 
stmt2 
… 
stmtk 
} 
… 
stmt1 
stmt2 
… 
stmtk
Основные программные конструкции PGAS-языков 
6 
on iS–выполнение инструкций Sна узле i 
Вычислительныйузел j 
Вычислительныйузел i 
on i{ 
stmt1 
stmt2 
… 
stmtk 
} 
stmt1 
stmt2 
… 
stmtk
Основные программные конструкции PGAS-языков 
7 
coforallS–выполнение каждой итерации тела Sцикла в независимом потоке 
Вычислительныйузел i 
coforall{ 
stmt1 
stmt2 
… 
stmtk 
} 
… 
stmt1 
stmt2 
… 
stmtk 
stmt1 
stmt2 
… 
stmtk 
stmt1 
stmt2 
… 
stmtk 
…
Основные программные конструкции PGAS-языков 
8 
sync T–синхронизациягруппы потоков T 
Вычислительныйузел i 
stmt1 
stmt2 
… 
stmtk 
stmt1 
stmt2 
… 
stmtk 
Вычислительныйузел j 
barrier T 
… 
stmt1 
stmt2 
… 
stmtk 
stmt1 
stmt2 
… 
stmtk 
…
Основные программные конструкции PGAS-языков 
9 
Параллелизм уровня потоков 
порождение задач (begin, on) 
параллельные циклы (coforall) 
примитивы синхронизации (sync) 
Параллелизм уровня данных 
коллективные операции (редукция, префиксная сумма) над массивами 
распределённые структуры(проблемы размещения, оптимизация доступа)
Основные программные конструкции PGAS-языков 
10 
Параллелизм уровня потоков 
порождение задач (begin, on) 
параллельные циклы (coforall) 
примитивы синхронизации (sync) 
Параллелизм уровня данных 
коллективные операции (редукция, префиксная сумма) над массивами 
распределённые структуры(проблемы размещения, оптимизация доступа) 
1 
2
11 
Оптимизация выполнения редукции распределённых массивов
12 
Распределённые массивы (distributed arrays) 
A: 
Вычислительный узел 1 
Потоки 
Локальная память 
Вычислительный узел 2 
Потоки 
Локальная память 
Вычислительный узелN 
Потоки 
Локальная память 
… 
A1 
A2 
AN
13 
Параллельная редукция (reduce, reduction) 
a1 
a2 
aD 
A[1:D] 
… 
a1 
a2 
aD 
r= 
… 
a3 
a4 
a5 
a3 
 
 
 
 
2 
0 
A[1:5] 
2 
0 
3 
r= 
1 
3 
1 
1 
+ 
+ 
+ 
1 
+ 
= 7 
Редукция одномерного массива А: 
Пример для операции сложения:
14 
Параллельная редукция распределённого массива 
RabenseifnerR.Optimization of Collective Reduction Operations// Computational Science - ICCS 2004 -Lecture Notes in Computer Science. 2004. Vol.3036.P.1-9. 
LiS, HoeflerT., SnirM.NUMA-Aware Shared-Memory Collective Communication for MPI // HPDC 2013. 2013. P.85-96. 
A: 
2 
0 
1 
3 
Локальная память 
Локальная память 
Локальная память 
A1 
A2 
A3 
2 
0 
1 
3 
2 
0 
1 
3 
reduce(A, +)
15 
Параллельная редукция (reduce, reduction) 
RabenseifnerR.Optimization of Collective Reduction Operations// Computational Science - ICCS 2004 -Lecture Notes in Computer Science. 2004. Vol.3036.P.1-9. 
LiS, HoeflerT., SnirM.NUMA-Aware Shared-Memory Collective Communication for MPI // HPDC 2013. 2013. P.85-96. 
A: 
Вычислительный узел 1 
2 
0 
1 
3 
Локальная память 
Вычислительный узел 2 
Локальная память 
Вычислительный узелN 
Локальная память 
A1 
A2 
A3 
2 
0 
1 
3 
2 
0 
1 
3 
A: 
2 
0 
1 
3 
Локальная память 
Локальная память 
Локальная память 
A1 
A2 
A3 
2 
0 
1 
3 
2 
0 
1 
3 
r= 38 
reduce(A, +)
16 
Параллельная редукция (reduce, reduction) 
RabenseifnerR.Optimization of Collective Reduction Operations// Computational Science - ICCS 2004 -Lecture Notes in Computer Science. 2004. Vol.3036.P.1-9. 
LiS, HoeflerT., SnirM.NUMA-Aware Shared-Memory Collective Communication for MPI // HPDC 2013. 2013. P.85-96. 
A: 
Вычислительный узел 1 
2 
0 
1 
3 
Локальная память 
Вычислительный узел 2 
Локальная память 
Вычислительный узелN 
Локальная память 
A1 
A2 
A3 
2 
0 
1 
3 
2 
0 
1 
3 
A: 
2 
0 
1 
3 
Локальная память 
Локальная память 
Локальная память 
A1 
A2 
A3 
2 
0 
1 
3 
2 
0 
1 
3 
r= 38 
reduce(A, +) 
Результат редукции 
Распределённый массив
1 
useBlockDist; 
2 
3 
procmain { 
4 
varSpace = {1..n, 1..n}; 
5 
varBlockSpace= Space dmapped 
6 
Block(boundingBox=Space); 
7 
varBA: [BlockSpace] real; 
8 
9 
forall(i, j) inSpace do 
10 
BA[i, j] = i* 10 + j; 
11 
12 
varsum = + reduceBA; 
13 
14 
writeln(“REDUCE: ”, sum); 
15 
} 
17 
Пример редукции в Cray Chapel
1 
useBlockDist; 
2 
3 
procmain { 
4 
varSpace = {1..n, 1..n}; 
5 
varBlockSpace= Space dmapped 
6 
Block(boundingBox=Space); 
7 
varBA: [BlockSpace] real; 
8 
9 
forall(i, j) inSpace do 
10 
BA[i, j] = i* 10 + j; 
11 
12 
varsum = + reduceBA; 
13 
14 
writeln(“REDUCE: ”, sum); 
15 
} 
18 
Пример редукции в Cray Chapel
1 
useBlockDist; 
2 
3 
procmain { 
4 
varSpace = {1..n, 1..n}; 
5 
varBlockSpace= Space dmapped 
6 
Block(boundingBox=Space); 
7 
varBA: [BlockSpace] real; 
8 
9 
forall(i, j) inSpace do 
10 
BA[i, j] = i* 10 + j; 
11 
12 
varsum = + reduceBA; 
13 
14 
writeln(“REDUCE: ”, sum); 
15 
} 
19 
Пример редукции в Cray Chapel
1 
useBlockDist; 
2 
3 
procmain { 
4 
varSpace = {1..n, 1..n}; 
5 
varBlockSpace= Space dmapped 
6 
Block(boundingBox=Space); 
7 
varBA: [BlockSpace] real; 
8 
9 
forall(i, j) inSpace do 
10 
BA[i, j] = i* 10 + j; 
11 
12 
varsum = + reduceBA; 
13 
14 
writeln(“REDUCE: ”, sum); 
15 
} 
20 
Пример редукции в Cray Chapel
21 
Алгоритм редукции DefaultReduce 
Вычислительный узел 1 
Потоки 
Локальная память 
Вычислительный узел 2 
Потоки 
Локальная память 
Вычислительный узелN 
Потоки 
Локальная память 
… 
A1 
A2 
AN
22 
Алгоритм редукции DefaultReduce 
Вычислительный узел 1 
Потоки 
Локальная память 
Вычислительный узел 2 
Потоки 
Локальная память 
Вычислительный узелN 
Потоки 
Локальная память 
… 
Вычислительная трудоёмкость алгоритма DefaultReduce: 
푻=푶(|푨|/푵+푵) 
A1 
A2 
AN
23 
Алгоритм редукции DefaultReduce 
Вычислительный узел 1 
Потоки 
Локальная память 
Вычислительный узел 2 
Потоки 
Локальная память 
Вычислительный узелN 
Потоки 
Локальная память 
… 
Вычислительная трудоёмкость алгоритма DefaultReduce: 
푻=푶(|푨|/푵+푵) 
Количество порождённых потоков:푲=|푨| 
A1 
A2 
AN
24 
Алгоритм редукции BlockReduce 
Вычислительный узел 1 
Потоки 
Локальная память 
Вычислительный узел 2 
Потоки 
Локальная память 
Вычислительный узелN 
Потоки 
Локальная память 
… 
A1 
A2 
AN
25 
Алгоритм редукции BlockReduce 
Вычислительный узел 1 
Потоки 
Локальная память 
Вычислительный узел 2 
Потоки 
Локальная память 
Вычислительный узелN 
Потоки 
Локальная память 
… 
A1 
A2 
AN
26 
Алгоритм редукции BlockReduce 
Вычислительный узел 1 
Потоки 
Локальная память 
Вычислительный узел 2 
Потоки 
Локальная память 
Вычислительный узелN 
Потоки 
Локальная память 
… 
A1 
A2 
AN
27 
Алгоритм редукции BlockReduce 
Вычислительный узел 1 
Потоки 
Локальная память 
Вычислительный узел 2 
Потоки 
Локальная память 
Вычислительный узелN 
Потоки 
Локальная память 
… 
Количество порождённых потоков:푲=푵×풏 
A1 
A2 
AN
28 
Алгоритм редукции BlockReduce(II этап) 
r[1] 
r[2] 
A[1:D] 
… 
r[3] 
r[4] 
r[5] 
r12 
r34 
r56 
r[6] 
r 
r 
1234 
BARRIER 
BARRIER 
r 
5678 
r[7] 
r[8] 
r78 
… 
… 
r[1] r[2] 
r[3] r[4] 
r[5] r[6] 
r[7] r[8] 
r12r34 
r56r78 
rr 
1234 
5678 
… 
1 
2 
3 
4 
5 
6 
7 
8 
Узел 
…
29 
Алгоритм редукции BlockReduce 
Вычислительный узел 1 
Потоки 
Локальная память 
Вычислительный узел 2 
Потоки 
Локальная память 
Вычислительный узелN 
Потоки 
Локальная память 
… 
Количество порождённых потоков:푲=푵×풏 
A1 
A2 
AN 
Вычислительная трудоёмкость алгоритма BlockReduce: 
푻=푶(|푨|/푵+log(푵))
30 
Алгоритм барьерной синхронизации потоков Central Counter 
NanjegowdaR., HernandezO., ChapmanB., JinH.ScalabilityEvaluationofBarrierAlgorithmsforOpenMP// IWOMP '09 Proceedingsofthe5th InternationalWorkshoponOpenMP: EvolvingOpenMPinanAgeofExtremeParallelism. 2009. Vol. 5568. P. 42-52
31 
Оптимизация доступа к удалённым массивам
32 
Объявление массивов в IBM X10 
x10.lang.Rail[T] 
Одномерныймассив с элементами типа T 
Индексы типа Long 
Базовый класс для массивов 
x10.regionarray.Array[T] 
Многомерныймассива с элементами типа T 
Основан на Rail массиве
varb: 
Long = a(k); 
// ... 
33 
Операции над распределёнными массивами в IBM X10 
Вычислительныйузел j 
Вычислительныйузел i 
vala:Array[Long]; 
at(Place.place(i)) 
{ 
varb: 
Long =a(k) 
// ... 
} 
Доступ к элементам удалённого массива 
Копирование всего массива a
varb: 
Long = a(k); 
// ... 
34 
Операции над распределёнными массивами в IBM X10 
Вычислительныйузел j 
Вычислительныйузел i 
vala:Array[Long]; 
for(iin 0..N) { 
at(Place.place(i)) 
{ 
varb: 
Long =a(k) 
// ... 
} 
} 
Циклический доступ к элементам удалённого массива
varb: 
Long = a(k); 
// ... 
35 
Операции над распределёнными массивами в IBM X10 
Вычислительныйузел j 
Вычислительныйузел i 
vala:Array[Long]; 
for(iin 0..N) { 
at(Place.place(i)) 
{ 
varb: 
Long =a(k) 
// ... 
} 
} 
Циклический доступ к элементам удалённого массива 
Копирование всего массива a
36 
Копирование удалённых массивов как узкое место 
1 
valA:Array[Long] = 
2 
new Array[Long](length, (i:Long) => i); 
3 
4 
finish { 
5 
for (iin 0..(length –1)) { 
6 
valplaceId:Long= i% 
7 
Place.MAX_PLACES; 
8 
at (Place.place(placeId)) async{ 
9 
valtmpA= A(i); 
10 
... 
11 
} 
12 
} 
13 
}
37 
Копирование удалённых массивов как узкое место 
1 
valA:Array[Long] = 
2 
new Array[Long](length, (i:Long) => i); 
3 
4 
finish { 
5 
for (iin 0..(length –1)) { 
6 
valplaceId:Long= i% 
7 
Place.MAX_PLACES; 
8 
at (Place.place(placeId)) async{ 
9 
valtmpA= A(i); 
10 
... 
11 
} 
12 
} 
13 
}
38 
Копирование удалённых массивов как узкое место 
1 
valA:Array[Long] = 
2 
new Array[Long](length, (i:Long) => i); 
3 
4 
finish { 
5 
for (iin 0..(length –1)) { 
6 
valplaceId:Long= i% 
7 
Place.MAX_PLACES; 
8 
at (Place.place(placeId)) async{ 
9 
valtmpA= A(i); 
10 
... 
11 
} 
12 
} 
13 
}
39 
Копирование удалённых массивов как узкое место 
1 
valA:Array[Long] = 
2 
new Array[Long](length, (i:Long) => i); 
3 
4 
finish { 
5 
for (iin 0..(length –1)) { 
6 
valplaceId:Long= i% 
7 
Place.MAX_PLACES; 
8 
at (Place.place(placeId)) async{ 
9 
valtmpA= A(i); 
10 
... 
11 
} 
12 
} 
13 
}
40 
Копирование удалённых массивов как узкое место 
Вычислительныйузел i 
tmpA= A(i) 
Вычислительныйузел j 
Вычислительныйузелk 
A: a[1], a[2], 
..., a[n] 
tmpA= A(i) 
tmpA: ... 
tmpA= A(i) 
tmpA: ...
41 
Копирование удалённых массивов как узкое место 
Вычислительныйузел i 
tmpA= A(i) 
Вычислительныйузел j 
Вычислительныйузел k 
A: a[1], a[2], 
..., a[n] 
tmpA= A(i) 
tmpA: ... 
tmpA= A(i) 
tmpA: ... 
Копирование всего массива на каждой итерации цикла
42 
Копирование удалённых массивов как узкое место 
Вычислительныйузел i 
tmpA= A(i) 
Вычислительныйузел j 
Вычислительныйузел k 
A: a[1], a[2], 
..., a[n] 
tmpA= A(i) 
tmpA: ... 
tmpA= A(i) 
tmpA: ... 
Копирование всего массива на каждой итерации цикла 
Алгоритм Scalar replacement?
43 
Алгоритм ArrayPreloadоптимизациидоступа к удалённым массивам 
1 
valsharedA:DistArray[Array[Long]] = 
2 
DistArray.make[Array[Long]] 
3 
(Dist.makeUnique(), A); 
4 
5 
for(iin0..(length –1)) { 
6 
valplaceId:Long= i% Place.MAX_PLACES; 
7 
at(Place.place(placeId)) async{ 
8 
valtmpA= sharedA(placeId)(i); 
9 
// ... 
10 
} 
11 
}
44 
Алгоритм ArrayPreloadоптимизациидоступа к удалённым массивам 
1 
valsharedA:DistArray[Array[Long]] = 
2 
DistArray.make[Array[Long]] 
3 
(Dist.makeUnique(), A); 
4 
5 
for(iin0..(length –1)) { 
6 
valplaceId:Long= i% Place.MAX_PLACES; 
7 
at(Place.place(placeId)) async{ 
8 
valtmpA= sharedA(placeId)(i); 
9 
// ... 
10 
} 
11 
}
45 
Алгоритм ArrayPreloadоптимизациидоступа к удалённым массивам 
1 
valsharedA:DistArray[Array[Long]] = 
2 
DistArray.make[Array[Long]] 
3 
(Dist.makeUnique(), A); 
4 
5 
for(iin0..(length –1)) { 
6 
valplaceId:Long= i% Place.MAX_PLACES; 
7 
at(Place.place(placeId)) async{ 
8 
valtmpA= sharedA(placeId)(i); 
9 
// ... 
10 
} 
11 
}
46 
Алгоритм ArrayPreloadоптимизациидоступа к удалённым массивам 
Вычислительныйузел i 
for() { 
} 
Вычислительныйузел j 
Вычислительныйузел k 
A 
sharedA(0) = A 
for() { 
} 
sharedA(j) = A 
for() { 
} 
sharedA(i) = A 
Копирование массива один раз перед выполнением цикла
Функциональная структура компилятора IBM Х10 
47 
X10 Runtime 
X10 Application 
X10 Class Libs 
Front End 
AST optimizationsAST-lowering 
.cu 
C++ 
Java 
g++/xlC 
g++/xlC 
javac 
Native Back End 
Java Back End 
Executable 
Bytecode 
X10 Runtime 
X10 Runtime C++ Natives 
X10 AST 
JVM 
X10 AST (Abstract Syntax Tree) 
X10 Runtime 
X10 Runtime Java Natives 
Источник: http://x10.codehaus.org/X10+Day
Функциональная структура компилятора IBM Х10 
48 
X10 Runtime 
X10 Application 
X10 Class Libs 
Front End 
AST optimizationsAST-lowering 
.cu 
C++ 
Java 
g++/xlC 
g++/xlC 
javac 
Native Back End 
Java Back End 
Executable 
Bytecode 
X10 Runtime 
X10 Runtime C++ Natives 
X10 AST 
JVM 
X10 AST (Abstract Syntax Tree) 
X10 Runtime 
X10 Runtime Java Natives 
Источник: http://x10.codehaus.org/X10+Day 
Реализация ArrayPreload
Block 
Loop 
Block 
At 
Block 
Call 
Arg 
Target 
Stmt 
Stmt 
Stmt 
... 
... 
... 
Трансформация AST-дерева в алгоритме ArrayPreload 
49 
AST-дерево программы
Поиск в ASTдереве подходящей конструкции 
Block 
Block 
At 
Block 
Call 
Arg 
Target 
Stmt 
Stmt 
... 
... 
... 
Трансформация AST-дерева в алгоритме ArrayPreload 
50 
1 
Loop 
Stmt 
AST-дерево программы
Поискчтения массива Array[T]в цикле 
Поиск в ASTдереве подходящей конструкции 
Block 
Block 
At 
Block 
Call 
Arg 
Target 
Stmt 
Stmt 
... 
... 
... 
Трансформация AST-дерева в алгоритме ArrayPreload 
51 
1 
2 
Loop 
Stmt 
AST-дерево программы
Поискчтения массива Array[T]в цикле 
Поиск в ASTдереве подходящей конструкции 
Трансформация AST дерева 
Block 
Block 
At 
Block 
Call 
Arg 
Call 
Stmt 
Stmt 
... 
... 
... 
Decl 
Arg 
Target 
Трансформация AST-дерева в алгоритме ArrayPreload 
52 
1 
2 
3 
Loop 
Stmt 
AST-дерево программы
푻=푻풄풐풑풚푨[]×푵 
for ... A(i) 
for ... A(i) 
A()={…} 
푻=푻풄풐풑풚푨[] 
for ... A'(i) 
for ... A'(i) 
A()={…} 
A' = A 
A' = A 
A' = A 
Область j 
Область i 
Область k 
Область j 
Область i 
Область k 
A 
Трансформация AST-дерева в алгоритме ArrayPreload 
53 
Block 
Block 
At 
Block 
Call 
Arg 
Call 
Stmt 
Stmt 
... 
... 
... 
Decl 
Arg 
Target 
Loop 
Stmt 
AST-дерево
Организация экспериментов (алгоритмBlockReduce) 
54 
Конфигурация подсистемы 
Кластер А: 16 узлов 2 x IntelXeonE5420 2.5 GHz(8 процессорных ядер на узел), 25 GiB, сетьGigabit Ethernet 
Кластер B: 6 узлов 2 x IntelXeonE5620 2.4 GHz(8 процессорных ядер на узел), 8 GiB, сеть InfiniBandQDR 
Описание тестовых программ 
Синтетический тест: 푅=100операций редукции 
Размер массива 퐷=4000,8000,…,20000элементов 
Chapel-программа PTRANS–транспонирование распределённых матриц 
Chapel-программа miniMD–молекулярная динамика
55 
Результаты экспериментов(алгоритмBlockReduce) 
R= 100операций редукции массива A[1:D], 4узла кластера Jet 
t, c 
D 
BlockReduce 
DefReduce
56 
Результаты экспериментов(алгоритмBlockReduce) 
R= 100операций редукции массива A[1:D], 8узлов кластера Jet 
t, c 
D 
BlockReduce 
DefReduce
Программа miniMD, Nузлов кластера Jet 
57 
Результаты экспериментов(алгоритмBlockReduce) 
t, c 
N 
BlockReduce 
DefReduce
58 
Результаты экспериментов(алгоритмBlockReduce) 
Программа PTRANS, Nузлов кластера Jet 
t, c 
N 
BlockReduce 
DefReduce
Организация экспериментов(алгоритм ArrayPreload) 
59 
Конфигурация подсистемы 
Кластер А: 16 узлов 2 x IntelXeonE5420 2.5 GHz(8 процессорных ядер на узел), 25 GiB, сетьGigabit Ethernet 
КластерB: 6 узлов 2 x IntelXeonE5620 2.4 GHz(8 процессорных ядер на узел), 8 GiB, сеть InfiniBandQDR 
Описание тестовой программы 
Тест циклического (Round-robin) обращения к массиву 
Размер массива D{40000, 4000, 400, 40}элементов 
Количество обращений к массиву R{40000, 4000, 400, 40} 
Массив Array[Long] 
Условия запуска 
Количество потоков на один узел: 8 
C++ Backend
60 
Результаты экспериментов. Алгоритм Scalar replacement 
Кластер А, Сеть Gigabit Ethernet 
s 
N 
D= 40000, R= 40000 
D= 40000, R= 4000 
D= 40000, R= 4000 
D= 40000, R= 40
61 
Результаты экспериментов. Алгоритм ArrayPreload 
Кластер А, Сеть Gigabit Ethernet 
s 
N 
D= 40000, R= 40000 
D= 40000, R= 4000 
D= 40000, R= 4000 
D= 40000, R= 40
62 
Результаты экспериментов. Алгоритм ArrayPreload 
Кластер В, Сеть InfinibandQDR 
s 
N 
D= 40000, R= 40000 
D= 40000, R= 4000 
D= 40000, R= 4000 
D= 40000, R= 40
63 
Результаты экспериментов. Алгоритм ArrayPreload 
Кластер В, Сеть InfinibandQDR 
s 
N 
D= 40000, R= 40000 
D= 4000, R= 40000 
D= 400, R= 40000 
D= 40, R= 40000
64 
Предложены алгоритмы BlockReduceи ArrayPreloadоптимизации информационных обменов в параллельных PGAS-программах. Алгоритмы реализован для языков Cray Chapelи IBM X10. 
Алгоритм BlockReduceобеспечивает сокращение времени выполнения операции редукции на 5-10% для массивов большого размера (D> 10000). 
Алгоритм ArrayPreloadпредварительного копирования элементов удалённых массивов позволяет сократить время выполнения циклического доступа в среднем от 2 до 80 раз. 
ArrayPreloadэффективен для программ, выполняющих обращение к массивам большого размера (D> 5000)в циклах с большим числом итераций(R> 500). 
Результаты
65 
Разработка алгоритмов реализации коллективных операций в PGAS-языках с учётом типа распределения элементов массива между узлами. 
Создание алгоритмов оптимизации доступа к удалённым массивам по результатам предварительного профилирования PGAS-программ (profile guided optimization). 
Развитие эвристических алгоритмов предварительного распределения данных по узлам распределённой ВС. 
Применение алгоритмов компиляторной оптимизации для разрешения проблем согласованности памяти при выполнении операций с распределёнными массивами. 
Разработка алгоритмов кэширования для PGAS-программ. 
Направления дальнейших исследований
Спасибо за внимание! 
Пазников А.А.apaznikov@gmail.com 
https://bitbucket.org/apaznikov/chapel 
Кулагин И.И.ivan.i.kulagin@gmail.com 
КурносовМ.Г. mkurnosov@gmail.com
67 
Backup-слайды
68 
Алгоритм редукции BlockReduce(I этап) 
Входныеданные: 
A[1:D] –распределённый массив, 
–ассоциативная операция редукции. 
Выходные данные: 
r–результатпримененияредукциидляA. 
1 
coforalliin[1,2,…,N] do // N–число узлов 
2 
oni 
3 
SPLITDOMAIN(Ai, n) // Разбиение на n блоков 
4 
//по числу процессорных ядер 
5 
coforalltin[1,2, …,n] do 
6 
foreachx inAitdo 
7 
rit= ritx 
8 
foreachtin[1,2…,n] do 
9 
ri= ririt
69 
Алгоритм редукции BlockReduce(I этап) 
Входныеданные: 
A[1:D] –распределённый массив, 
–ассоциативная операция редукции. 
Выходные данные: 
r–результатпримененияредукциидляA. 
1 
coforalliin[1,2,…,N] do // N–число узлов 
2 
oni 
3 
SPLITDOMAIN(Ai, n) // Разбиение на n блоков 
4 
//по числу процессорных ядер 
5 
coforalltin[1,2, …,n] do 
6 
foreachx inAitdo 
7 
rit= ritx 
8 
foreachtin[1,2…,n] do 
9 
ri= ririt
70 
Алгоритм редукции BlockReduce(I этап) 
Входныеданные: 
A[1:D] –распределённый массив, 
–ассоциативная операция редукции. 
Выходные данные: 
r–результатпримененияредукциидляA. 
1 
coforalliin[1,2,…,N] do // N–число узлов 
2 
oni 
3 
SPLITDOMAIN(Ai, n) // Разбиение на n блоков 
4 
//по числу процессорных ядер 
5 
coforalltin[1,2, …,n] do 
6 
foreachx inAitdo 
7 
rit= ritx 
8 
foreachtin[1,2…,n] do 
9 
ri= ririt
71 
Алгоритм редукции BlockReduce(I этап) 
Входныеданные: 
A[1:D] –распределённый массив, 
–ассоциативная операция редукции. 
Выходные данные: 
r–результатпримененияредукциидляA. 
1 
coforalliin[1,2,…,N] do // N–число узлов 
2 
oni 
3 
SPLITDOMAIN(Ai, n) // Разбиение на n блоков 
4 
//по числу процессорных ядер 
5 
coforalltin[1,2, …,n] do 
6 
foreachx inAitdo 
7 
rit= ritx 
8 
foreachtin[1,2…,n] do 
9 
ri= ririt
72 
Алгоритм редукции BlockReduce(I этап) 
Входныеданные: 
A[1:D] –распределённый массив, 
–ассоциативная операция редукции. 
Выходные данные: 
r–результатпримененияредукциидляA. 
1 
coforalliin[1,2,…,N] do // N–число узлов 
2 
oni 
3 
SPLITDOMAIN(Ai, n) // Разбиение на n блоков 
4 
//по числу процессорных ядер 
5 
coforalltin[1,2, …,n] do 
6 
foreachx inAitdo 
7 
rit= ritx 
8 
foreachtin[1,2…,n] do 
9 
ri= ririt
73 
Алгоритм редукции BlockReduce(I этап) 
Входныеданные: 
A[1:D] –распределённый массив, 
–ассоциативная операция редукции. 
Выходные данные: 
r–результатпримененияредукциидляA. 
1 
coforalliin[1,2,…,N] do // N–число узлов 
2 
oni 
3 
SPLITDOMAIN(Ai, n) // Разбиение на n блоков 
4 
//по числу процессорных ядер 
5 
coforalltin[1,2, …,n] do 
6 
foreachx inAitdo 
7 
rit= ritx 
8 
foreachtin[1,2…,n] do 
9 
ri= ririt
74 
Алгоритм редукции BlockReduce(II этап) 
Входныеданные: 
A[1:D] –распределённый массив, 
–ассоциативная операция редукции. 
Выходные данные: 
r–результатпримененияредукциидляA. 
… 
9 
while N> 1 do 
10 
while i+1<Ndo 
11 
begin 
12 
onri 
13 
ri= riri+1 
14 
i= i+ 2 
15 
BARRIER([1, 2, …, N]) // Барьерная синхронизация потоков 
16 
REFRESH(N) // Обновление числа NВУ 
17 
returnr
75 
Алгоритм редукции BlockReduce(II этап) 
Входныеданные: 
A[1:D] –распределённый массив, 
–ассоциативная операция редукции. 
Выходные данные: 
r–результатпримененияредукциидляA. 
… 
9 
while N> 1 do 
10 
while i+1<Ndo 
11 
begin 
12 
onri 
13 
ri= riri+1 
14 
i= i+ 2 
15 
BARRIER([1, 2, …, N]) // Барьерная синхронизация потоков 
16 
REFRESH(N) // Обновление числа NВУ 
17 
returnr
76 
Алгоритм редукции BlockReduce(II этап) 
Входныеданные: 
A[1:D] –распределённый массив, 
–ассоциативная операция редукции. 
Выходные данные: 
r–результатпримененияредукциидляA. 
… 
9 
while N> 1 do 
10 
while i+1<Ndo 
11 
begin 
12 
onri 
13 
ri= riri+1 
14 
i= i+ 2 
15 
BARRIER([1, 2, …, N]) // Барьерная синхронизация потоков 
16 
REFRESH(N) // Обновление числа NВУ 
17 
returnr
77 
Алгоритм редукции BlockReduce(II этап) 
Входныеданные: 
A[1:D] –распределённый массив, 
–ассоциативная операция редукции. 
Выходные данные: 
r–результатпримененияредукциидляA. 
… 
9 
while N> 1 do 
10 
while i+1<Ndo 
11 
begin 
12 
onri 
13 
ri= riri+1 
14 
i= i+ 2 
15 
BARRIER([1, 2, …, N]) // Барьерная синхронизация потоков 
16 
REFRESH(N) // Обновление числа NВУ 
17 
returnr
78 
Определение распределённых массивов в IBM X10 
valA:DistArray[Long] = 
DistArray.make[Long](Dist.makeUnique(), 
(p: Point) => {here.id}); 
Вычислительный узел 1 
Потоки 
Локальная память 
Вычислительный узел 2 
Потоки 
Локальная память 
Вычислительный узелN 
Потоки 
Локальная память 
… 
A1 
A2 
AN 
A:

Weitere ähnliche Inhalte

Was ist angesagt?

ПВТ - осень 2014 - Лекция 7. Многопоточное программирование без блокировок. М...
ПВТ - осень 2014 - Лекция 7. Многопоточное программирование без блокировок. М...ПВТ - осень 2014 - Лекция 7. Многопоточное программирование без блокировок. М...
ПВТ - осень 2014 - Лекция 7. Многопоточное программирование без блокировок. М...Alexey Paznikov
 
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++. Р...
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++.   Р...ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++.   Р...
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++. Р...Alexey Paznikov
 
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...Alexey Paznikov
 
ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...
ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...
ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...Alexey Paznikov
 
Лекция 1. Основные понятия стандарта MPI. Дифференцированные обмены
Лекция 1. Основные понятия стандарта MPI. Дифференцированные обменыЛекция 1. Основные понятия стандарта MPI. Дифференцированные обмены
Лекция 1. Основные понятия стандарта MPI. Дифференцированные обменыAlexey Paznikov
 
Лекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPЛекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPMikhail Kurnosov
 
Лекция 7: Многопоточное программирование: часть 3 (OpenMP)
Лекция 7: Многопоточное программирование: часть 3 (OpenMP)Лекция 7: Многопоточное программирование: часть 3 (OpenMP)
Лекция 7: Многопоточное программирование: часть 3 (OpenMP)Mikhail Kurnosov
 
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVM
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVMДмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVM
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVMSergey Platonov
 
Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...
Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...
Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...Alexey Paznikov
 
Лекция 8. Intel Threading Building Blocks
Лекция 8. Intel Threading Building BlocksЛекция 8. Intel Threading Building Blocks
Лекция 8. Intel Threading Building BlocksMikhail Kurnosov
 
Модель памяти C++ - Андрей Янковский, Яндекс
Модель памяти C++ - Андрей Янковский, ЯндексМодель памяти C++ - Андрей Янковский, Яндекс
Модель памяти C++ - Андрей Янковский, ЯндексYandex
 
Семинар 5. Многопоточное программирование на OpenMP (часть 5)
Семинар 5. Многопоточное программирование на OpenMP (часть 5)Семинар 5. Многопоточное программирование на OpenMP (часть 5)
Семинар 5. Многопоточное программирование на OpenMP (часть 5)Mikhail Kurnosov
 
Семинар 6. Многопоточное программирование на OpenMP (часть 6)
Семинар 6. Многопоточное программирование на OpenMP (часть 6)Семинар 6. Многопоточное программирование на OpenMP (часть 6)
Семинар 6. Многопоточное программирование на OpenMP (часть 6)Mikhail Kurnosov
 
Лекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPЛекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPMikhail Kurnosov
 
Семинар 2. Многопоточное программирование на OpenMP (часть 2)
Семинар 2. Многопоточное программирование на OpenMP (часть 2)Семинар 2. Многопоточное программирование на OpenMP (часть 2)
Семинар 2. Многопоточное программирование на OpenMP (часть 2)Mikhail Kurnosov
 
Лекция 3. Виртуальные топологии в MPI. Параллельные алгоритмы в стандарте MPI...
Лекция 3. Виртуальные топологии в MPI. Параллельные алгоритмы в стандарте MPI...Лекция 3. Виртуальные топологии в MPI. Параллельные алгоритмы в стандарте MPI...
Лекция 3. Виртуальные топологии в MPI. Параллельные алгоритмы в стандарте MPI...Alexey Paznikov
 
Семинар 4. Многопоточное программирование на OpenMP (часть 4)
Семинар 4. Многопоточное программирование на OpenMP (часть 4)Семинар 4. Многопоточное программирование на OpenMP (часть 4)
Семинар 4. Многопоточное программирование на OpenMP (часть 4)Mikhail Kurnosov
 
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...Mikhail Kurnosov
 
Дракон в мешке: от LLVM к C++ и проблемам неопределенного поведения
Дракон в мешке: от LLVM к C++ и проблемам неопределенного поведенияДракон в мешке: от LLVM к C++ и проблемам неопределенного поведения
Дракон в мешке: от LLVM к C++ и проблемам неопределенного поведенияPlatonov Sergey
 

Was ist angesagt? (20)

ПВТ - осень 2014 - Лекция 7. Многопоточное программирование без блокировок. М...
ПВТ - осень 2014 - Лекция 7. Многопоточное программирование без блокировок. М...ПВТ - осень 2014 - Лекция 7. Многопоточное программирование без блокировок. М...
ПВТ - осень 2014 - Лекция 7. Многопоточное программирование без блокировок. М...
 
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++. Р...
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++.   Р...ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++.   Р...
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++. Р...
 
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
 
ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...
ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...
ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...
 
Лекция 1. Основные понятия стандарта MPI. Дифференцированные обмены
Лекция 1. Основные понятия стандарта MPI. Дифференцированные обменыЛекция 1. Основные понятия стандарта MPI. Дифференцированные обмены
Лекция 1. Основные понятия стандарта MPI. Дифференцированные обмены
 
Лекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPЛекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMP
 
Лекция 7: Многопоточное программирование: часть 3 (OpenMP)
Лекция 7: Многопоточное программирование: часть 3 (OpenMP)Лекция 7: Многопоточное программирование: часть 3 (OpenMP)
Лекция 7: Многопоточное программирование: часть 3 (OpenMP)
 
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVM
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVMДмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVM
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVM
 
Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...
Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...
Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...
 
Лекция 8. Intel Threading Building Blocks
Лекция 8. Intel Threading Building BlocksЛекция 8. Intel Threading Building Blocks
Лекция 8. Intel Threading Building Blocks
 
Модель памяти C++ - Андрей Янковский, Яндекс
Модель памяти C++ - Андрей Янковский, ЯндексМодель памяти C++ - Андрей Янковский, Яндекс
Модель памяти C++ - Андрей Янковский, Яндекс
 
Семинар 5. Многопоточное программирование на OpenMP (часть 5)
Семинар 5. Многопоточное программирование на OpenMP (часть 5)Семинар 5. Многопоточное программирование на OpenMP (часть 5)
Семинар 5. Многопоточное программирование на OpenMP (часть 5)
 
Семинар 6. Многопоточное программирование на OpenMP (часть 6)
Семинар 6. Многопоточное программирование на OpenMP (часть 6)Семинар 6. Многопоточное программирование на OpenMP (часть 6)
Семинар 6. Многопоточное программирование на OpenMP (часть 6)
 
Parallel STL
Parallel STLParallel STL
Parallel STL
 
Лекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPЛекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMP
 
Семинар 2. Многопоточное программирование на OpenMP (часть 2)
Семинар 2. Многопоточное программирование на OpenMP (часть 2)Семинар 2. Многопоточное программирование на OpenMP (часть 2)
Семинар 2. Многопоточное программирование на OpenMP (часть 2)
 
Лекция 3. Виртуальные топологии в MPI. Параллельные алгоритмы в стандарте MPI...
Лекция 3. Виртуальные топологии в MPI. Параллельные алгоритмы в стандарте MPI...Лекция 3. Виртуальные топологии в MPI. Параллельные алгоритмы в стандарте MPI...
Лекция 3. Виртуальные топологии в MPI. Параллельные алгоритмы в стандарте MPI...
 
Семинар 4. Многопоточное программирование на OpenMP (часть 4)
Семинар 4. Многопоточное программирование на OpenMP (часть 4)Семинар 4. Многопоточное программирование на OpenMP (часть 4)
Семинар 4. Многопоточное программирование на OpenMP (часть 4)
 
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
 
Дракон в мешке: от LLVM к C++ и проблемам неопределенного поведения
Дракон в мешке: от LLVM к C++ и проблемам неопределенного поведенияДракон в мешке: от LLVM к C++ и проблемам неопределенного поведения
Дракон в мешке: от LLVM к C++ и проблемам неопределенного поведения
 

Ähnlich wie Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов в параллельных PGAS-программах

Семинар 1. Многопоточное программирование на OpenMP (часть 1)
Семинар 1. Многопоточное программирование на OpenMP (часть 1)Семинар 1. Многопоточное программирование на OpenMP (часть 1)
Семинар 1. Многопоточное программирование на OpenMP (часть 1)Mikhail Kurnosov
 
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...Yandex
 
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray Chapel
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray ChapelЛекция 12 (часть 1): Языки программирования семейства PGAS: Cray Chapel
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray ChapelMikhail Kurnosov
 
Язык параллельного программирования Cray Chapel
Язык параллельного программирования Cray ChapelЯзык параллельного программирования Cray Chapel
Язык параллельного программирования Cray ChapelMikhail Kurnosov
 
Работа с Big Data
Работа с Big Data Работа с Big Data
Работа с Big Data MATLAB
 
Анализ эффективности выполнения алгоритма параллельной редукции в языке Cray ...
Анализ эффективности выполнения алгоритма параллельной редукции в языке Cray ...Анализ эффективности выполнения алгоритма параллельной редукции в языке Cray ...
Анализ эффективности выполнения алгоритма параллельной редукции в языке Cray ...Alexey Paznikov
 
11 встреча — Введение в GPGPU (А. Свириденков)
11 встреча — Введение в GPGPU (А. Свириденков)11 встреча — Введение в GPGPU (А. Свириденков)
11 встреча — Введение в GPGPU (А. Свириденков)Smolensk Computer Science Club
 
ПВТ - осень 2014 - лекция 1 - Введение в параллельные вычисления
ПВТ - осень 2014 - лекция 1 - Введение в параллельные вычисленияПВТ - осень 2014 - лекция 1 - Введение в параллельные вычисления
ПВТ - осень 2014 - лекция 1 - Введение в параллельные вычисленияAlexey Paznikov
 
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"Yandex
 
Лекция 6: Многопоточное программирование: часть 2 (Speedup, Amdahl's law, POS...
Лекция 6: Многопоточное программирование: часть 2 (Speedup, Amdahl's law, POS...Лекция 6: Многопоточное программирование: часть 2 (Speedup, Amdahl's law, POS...
Лекция 6: Многопоточное программирование: часть 2 (Speedup, Amdahl's law, POS...Mikhail Kurnosov
 
Лекция 7: Фибоначчиевы кучи (Fibonacci heaps)
Лекция 7: Фибоначчиевы кучи (Fibonacci heaps)Лекция 7: Фибоначчиевы кучи (Fibonacci heaps)
Лекция 7: Фибоначчиевы кучи (Fibonacci heaps)Mikhail Kurnosov
 
Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...Ontico
 
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
 
Netmap (by luigi rizzo) простой и удобный opensource фреймворк для обработк...
Netmap (by luigi rizzo)   простой и удобный opensource фреймворк для обработк...Netmap (by luigi rizzo)   простой и удобный opensource фреймворк для обработк...
Netmap (by luigi rizzo) простой и удобный opensource фреймворк для обработк...Ontico
 
Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...a15464321646213
 
Лекция №3 Организация ЭВМ и систем
Лекция №3 Организация ЭВМ и системЛекция №3 Организация ЭВМ и систем
Лекция №3 Организация ЭВМ и системpianist2317
 
Пути увеличения эффективности реализации алгоритмов машинного обучения
Пути увеличения эффективности реализации алгоритмов машинного обученияПути увеличения эффективности реализации алгоритмов машинного обучения
Пути увеличения эффективности реализации алгоритмов машинного обученияAndrew Babiy
 

Ähnlich wie Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов в параллельных PGAS-программах (20)

Efficiency vvv
Efficiency vvvEfficiency vvv
Efficiency vvv
 
Семинар 1. Многопоточное программирование на OpenMP (часть 1)
Семинар 1. Многопоточное программирование на OpenMP (часть 1)Семинар 1. Многопоточное программирование на OpenMP (часть 1)
Семинар 1. Многопоточное программирование на OpenMP (часть 1)
 
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
 
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray Chapel
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray ChapelЛекция 12 (часть 1): Языки программирования семейства PGAS: Cray Chapel
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray Chapel
 
Язык параллельного программирования Cray Chapel
Язык параллельного программирования Cray ChapelЯзык параллельного программирования Cray Chapel
Язык параллельного программирования Cray Chapel
 
Работа с Big Data
Работа с Big Data Работа с Big Data
Работа с Big Data
 
Анализ эффективности выполнения алгоритма параллельной редукции в языке Cray ...
Анализ эффективности выполнения алгоритма параллельной редукции в языке Cray ...Анализ эффективности выполнения алгоритма параллельной редукции в языке Cray ...
Анализ эффективности выполнения алгоритма параллельной редукции в языке Cray ...
 
11 встреча — Введение в GPGPU (А. Свириденков)
11 встреча — Введение в GPGPU (А. Свириденков)11 встреча — Введение в GPGPU (А. Свириденков)
11 встреча — Введение в GPGPU (А. Свириденков)
 
ПВТ - осень 2014 - лекция 1 - Введение в параллельные вычисления
ПВТ - осень 2014 - лекция 1 - Введение в параллельные вычисленияПВТ - осень 2014 - лекция 1 - Введение в параллельные вычисления
ПВТ - осень 2014 - лекция 1 - Введение в параллельные вычисления
 
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
 
Лекция 6: Многопоточное программирование: часть 2 (Speedup, Amdahl's law, POS...
Лекция 6: Многопоточное программирование: часть 2 (Speedup, Amdahl's law, POS...Лекция 6: Многопоточное программирование: часть 2 (Speedup, Amdahl's law, POS...
Лекция 6: Многопоточное программирование: часть 2 (Speedup, Amdahl's law, POS...
 
Лекция 7: Фибоначчиевы кучи (Fibonacci heaps)
Лекция 7: Фибоначчиевы кучи (Fibonacci heaps)Лекция 7: Фибоначчиевы кучи (Fibonacci heaps)
Лекция 7: Фибоначчиевы кучи (Fibonacci heaps)
 
Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...
 
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
 
Netmap (by luigi rizzo) простой и удобный opensource фреймворк для обработк...
Netmap (by luigi rizzo)   простой и удобный opensource фреймворк для обработк...Netmap (by luigi rizzo)   простой и удобный opensource фреймворк для обработк...
Netmap (by luigi rizzo) простой и удобный opensource фреймворк для обработк...
 
Лекция № 3 Организация ЭВМ и систем
Лекция № 3 Организация ЭВМ и системЛекция № 3 Организация ЭВМ и систем
Лекция № 3 Организация ЭВМ и систем
 
Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...
 
Лекция №3 Организация ЭВМ и систем
Лекция №3 Организация ЭВМ и системЛекция №3 Организация ЭВМ и систем
Лекция №3 Организация ЭВМ и систем
 
введение в Gpu
введение в Gpuвведение в Gpu
введение в Gpu
 
Пути увеличения эффективности реализации алгоритмов машинного обучения
Пути увеличения эффективности реализации алгоритмов машинного обученияПути увеличения эффективности реализации алгоритмов машинного обучения
Пути увеличения эффективности реализации алгоритмов машинного обучения
 

Mehr von 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
 
ПВТ - весна 2015 - Лекция 0. Описание курса
ПВТ - весна 2015 - Лекция 0. Описание курсаПВТ - весна 2015 - Лекция 0. Описание курса
ПВТ - весна 2015 - Лекция 0. Описание курса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
 
ТФРВС - весна 2014 - лекция 11
ТФРВС - весна 2014 - лекция 11ТФРВС - весна 2014 - лекция 11
ТФРВС - весна 2014 - лекция 11Alexey Paznikov
 
ТФРВС - весна 2014 - лекция 10
ТФРВС - весна 2014 - лекция 10ТФРВС - весна 2014 - лекция 10
ТФРВС - весна 2014 - лекция 10Alexey Paznikov
 
ТФРВС - весна 2014 - лекция 9
 ТФРВС - весна 2014 - лекция 9 ТФРВС - весна 2014 - лекция 9
ТФРВС - весна 2014 - лекция 9Alexey Paznikov
 
ТФРВС - весна 2014 - лекция 8
ТФРВС - весна 2014 - лекция 8ТФРВС - весна 2014 - лекция 8
ТФРВС - весна 2014 - лекция 8Alexey Paznikov
 
ТФРВС - весна 2014 - лекция 7
ТФРВС - весна 2014 - лекция 7ТФРВС - весна 2014 - лекция 7
ТФРВС - весна 2014 - лекция 7Alexey Paznikov
 
ТФРВС - весна 2014 - лекция 6
ТФРВС - весна 2014 - лекция 6ТФРВС - весна 2014 - лекция 6
ТФРВС - весна 2014 - лекция 6Alexey Paznikov
 

Mehr von Alexey Paznikov (13)

Лекция 6. Параллельная сортировка. Алгоритмы комбинаторного поиска. Параллель...
Лекция 6. Параллельная сортировка. Алгоритмы комбинаторного поиска. Параллель...Лекция 6. Параллельная сортировка. Алгоритмы комбинаторного поиска. Параллель...
Лекция 6. Параллельная сортировка. Алгоритмы комбинаторного поиска. Параллель...
 
Лекция 5. Метод конечных разностей (параллельные алгоритмы в стандарте MPI)
Лекция 5. Метод конечных разностей (параллельные алгоритмы в стандарте MPI)Лекция 5. Метод конечных разностей (параллельные алгоритмы в стандарте MPI)
Лекция 5. Метод конечных разностей (параллельные алгоритмы в стандарте MPI)
 
Лекция 4. Производные типы данных в стандарте MPI
Лекция 4. Производные типы данных в стандарте MPIЛекция 4. Производные типы данных в стандарте MPI
Лекция 4. Производные типы данных в стандарте MPI
 
ПВТ - весна 2015 - Лекция 0. Описание курса
ПВТ - весна 2015 - Лекция 0. Описание курсаПВТ - весна 2015 - Лекция 0. Описание курса
ПВТ - весна 2015 - Лекция 0. Описание курса
 
ПВТ - осень 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а - Описание курса
 
ТФРВС - весна 2014 - лекция 11
ТФРВС - весна 2014 - лекция 11ТФРВС - весна 2014 - лекция 11
ТФРВС - весна 2014 - лекция 11
 
ТФРВС - весна 2014 - лекция 10
ТФРВС - весна 2014 - лекция 10ТФРВС - весна 2014 - лекция 10
ТФРВС - весна 2014 - лекция 10
 
ТФРВС - весна 2014 - лекция 9
 ТФРВС - весна 2014 - лекция 9 ТФРВС - весна 2014 - лекция 9
ТФРВС - весна 2014 - лекция 9
 
ТФРВС - весна 2014 - лекция 8
ТФРВС - весна 2014 - лекция 8ТФРВС - весна 2014 - лекция 8
ТФРВС - весна 2014 - лекция 8
 
ТФРВС - весна 2014 - лекция 7
ТФРВС - весна 2014 - лекция 7ТФРВС - весна 2014 - лекция 7
ТФРВС - весна 2014 - лекция 7
 
ТФРВС - весна 2014 - лекция 6
ТФРВС - весна 2014 - лекция 6ТФРВС - весна 2014 - лекция 6
ТФРВС - весна 2014 - лекция 6
 

Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов в параллельных PGAS-программах

  • 1. Кулагин И.И., ПазниковА.А., КурносовМ.Г. Институт физики полупроводников им. А.В. РжановаСО РАН Оптимизация информационных обменов в параллельных PGAS-программах 3-я Всероссийская научно-техническая конференция «Суперкомпьютерные технологии» (СКТ-2014) 29 сентября –4 октября 2014 г., с. Дивноморское
  • 2. Общая память(PThreads, OpenMP, Cilk) Распределённая память(MPI) P P P Разделяемое общее адресное пространство (Partitioned Global Address Space –PGAS) P M Задача (процесс, поток) Память (адресное пространство) Доступ к памяти Передача сообщений •X10 •Chapel •UPC •Titanium •Co-array Fortran •HPF Программные модели вычислительных систем 2 P M P P P M P M P M
  • 3. 3 Глобальное разделённое адресное пространство (PGAS) HPF, Co-array Fortran, Titanium, UPC, IBM X10, Cray Chapel
  • 4. Основные программные конструкции PGAS-языков 4 begin S–асинхронное выполнение инструкций Sв отдельном потоке на вычислительном узле, с которого вызвана конструкция on iS–выполнение инструкций Sна узле i on x S–выполнение инструкций Sна том узле, в памяти которого находится объект x coforallS–выполнение каждой итерации тела Sцикла в независимом потоке sync T–синхронизациягруппы потоков T
  • 5. Основные программные конструкции PGAS-языков 5 begin S–асинхронное выполнение инструкций Sв отдельном потоке на вычислительном узле, с которого вызвана конструкция Вычислительныйузел i begin { stmt1 stmt2 … stmtk } … stmt1 stmt2 … stmtk
  • 6. Основные программные конструкции PGAS-языков 6 on iS–выполнение инструкций Sна узле i Вычислительныйузел j Вычислительныйузел i on i{ stmt1 stmt2 … stmtk } stmt1 stmt2 … stmtk
  • 7. Основные программные конструкции PGAS-языков 7 coforallS–выполнение каждой итерации тела Sцикла в независимом потоке Вычислительныйузел i coforall{ stmt1 stmt2 … stmtk } … stmt1 stmt2 … stmtk stmt1 stmt2 … stmtk stmt1 stmt2 … stmtk …
  • 8. Основные программные конструкции PGAS-языков 8 sync T–синхронизациягруппы потоков T Вычислительныйузел i stmt1 stmt2 … stmtk stmt1 stmt2 … stmtk Вычислительныйузел j barrier T … stmt1 stmt2 … stmtk stmt1 stmt2 … stmtk …
  • 9. Основные программные конструкции PGAS-языков 9 Параллелизм уровня потоков порождение задач (begin, on) параллельные циклы (coforall) примитивы синхронизации (sync) Параллелизм уровня данных коллективные операции (редукция, префиксная сумма) над массивами распределённые структуры(проблемы размещения, оптимизация доступа)
  • 10. Основные программные конструкции PGAS-языков 10 Параллелизм уровня потоков порождение задач (begin, on) параллельные циклы (coforall) примитивы синхронизации (sync) Параллелизм уровня данных коллективные операции (редукция, префиксная сумма) над массивами распределённые структуры(проблемы размещения, оптимизация доступа) 1 2
  • 11. 11 Оптимизация выполнения редукции распределённых массивов
  • 12. 12 Распределённые массивы (distributed arrays) A: Вычислительный узел 1 Потоки Локальная память Вычислительный узел 2 Потоки Локальная память Вычислительный узелN Потоки Локальная память … A1 A2 AN
  • 13. 13 Параллельная редукция (reduce, reduction) a1 a2 aD A[1:D] … a1 a2 aD r= … a3 a4 a5 a3     2 0 A[1:5] 2 0 3 r= 1 3 1 1 + + + 1 + = 7 Редукция одномерного массива А: Пример для операции сложения:
  • 14. 14 Параллельная редукция распределённого массива RabenseifnerR.Optimization of Collective Reduction Operations// Computational Science - ICCS 2004 -Lecture Notes in Computer Science. 2004. Vol.3036.P.1-9. LiS, HoeflerT., SnirM.NUMA-Aware Shared-Memory Collective Communication for MPI // HPDC 2013. 2013. P.85-96. A: 2 0 1 3 Локальная память Локальная память Локальная память A1 A2 A3 2 0 1 3 2 0 1 3 reduce(A, +)
  • 15. 15 Параллельная редукция (reduce, reduction) RabenseifnerR.Optimization of Collective Reduction Operations// Computational Science - ICCS 2004 -Lecture Notes in Computer Science. 2004. Vol.3036.P.1-9. LiS, HoeflerT., SnirM.NUMA-Aware Shared-Memory Collective Communication for MPI // HPDC 2013. 2013. P.85-96. A: Вычислительный узел 1 2 0 1 3 Локальная память Вычислительный узел 2 Локальная память Вычислительный узелN Локальная память A1 A2 A3 2 0 1 3 2 0 1 3 A: 2 0 1 3 Локальная память Локальная память Локальная память A1 A2 A3 2 0 1 3 2 0 1 3 r= 38 reduce(A, +)
  • 16. 16 Параллельная редукция (reduce, reduction) RabenseifnerR.Optimization of Collective Reduction Operations// Computational Science - ICCS 2004 -Lecture Notes in Computer Science. 2004. Vol.3036.P.1-9. LiS, HoeflerT., SnirM.NUMA-Aware Shared-Memory Collective Communication for MPI // HPDC 2013. 2013. P.85-96. A: Вычислительный узел 1 2 0 1 3 Локальная память Вычислительный узел 2 Локальная память Вычислительный узелN Локальная память A1 A2 A3 2 0 1 3 2 0 1 3 A: 2 0 1 3 Локальная память Локальная память Локальная память A1 A2 A3 2 0 1 3 2 0 1 3 r= 38 reduce(A, +) Результат редукции Распределённый массив
  • 17. 1 useBlockDist; 2 3 procmain { 4 varSpace = {1..n, 1..n}; 5 varBlockSpace= Space dmapped 6 Block(boundingBox=Space); 7 varBA: [BlockSpace] real; 8 9 forall(i, j) inSpace do 10 BA[i, j] = i* 10 + j; 11 12 varsum = + reduceBA; 13 14 writeln(“REDUCE: ”, sum); 15 } 17 Пример редукции в Cray Chapel
  • 18. 1 useBlockDist; 2 3 procmain { 4 varSpace = {1..n, 1..n}; 5 varBlockSpace= Space dmapped 6 Block(boundingBox=Space); 7 varBA: [BlockSpace] real; 8 9 forall(i, j) inSpace do 10 BA[i, j] = i* 10 + j; 11 12 varsum = + reduceBA; 13 14 writeln(“REDUCE: ”, sum); 15 } 18 Пример редукции в Cray Chapel
  • 19. 1 useBlockDist; 2 3 procmain { 4 varSpace = {1..n, 1..n}; 5 varBlockSpace= Space dmapped 6 Block(boundingBox=Space); 7 varBA: [BlockSpace] real; 8 9 forall(i, j) inSpace do 10 BA[i, j] = i* 10 + j; 11 12 varsum = + reduceBA; 13 14 writeln(“REDUCE: ”, sum); 15 } 19 Пример редукции в Cray Chapel
  • 20. 1 useBlockDist; 2 3 procmain { 4 varSpace = {1..n, 1..n}; 5 varBlockSpace= Space dmapped 6 Block(boundingBox=Space); 7 varBA: [BlockSpace] real; 8 9 forall(i, j) inSpace do 10 BA[i, j] = i* 10 + j; 11 12 varsum = + reduceBA; 13 14 writeln(“REDUCE: ”, sum); 15 } 20 Пример редукции в Cray Chapel
  • 21. 21 Алгоритм редукции DefaultReduce Вычислительный узел 1 Потоки Локальная память Вычислительный узел 2 Потоки Локальная память Вычислительный узелN Потоки Локальная память … A1 A2 AN
  • 22. 22 Алгоритм редукции DefaultReduce Вычислительный узел 1 Потоки Локальная память Вычислительный узел 2 Потоки Локальная память Вычислительный узелN Потоки Локальная память … Вычислительная трудоёмкость алгоритма DefaultReduce: 푻=푶(|푨|/푵+푵) A1 A2 AN
  • 23. 23 Алгоритм редукции DefaultReduce Вычислительный узел 1 Потоки Локальная память Вычислительный узел 2 Потоки Локальная память Вычислительный узелN Потоки Локальная память … Вычислительная трудоёмкость алгоритма DefaultReduce: 푻=푶(|푨|/푵+푵) Количество порождённых потоков:푲=|푨| A1 A2 AN
  • 24. 24 Алгоритм редукции BlockReduce Вычислительный узел 1 Потоки Локальная память Вычислительный узел 2 Потоки Локальная память Вычислительный узелN Потоки Локальная память … A1 A2 AN
  • 25. 25 Алгоритм редукции BlockReduce Вычислительный узел 1 Потоки Локальная память Вычислительный узел 2 Потоки Локальная память Вычислительный узелN Потоки Локальная память … A1 A2 AN
  • 26. 26 Алгоритм редукции BlockReduce Вычислительный узел 1 Потоки Локальная память Вычислительный узел 2 Потоки Локальная память Вычислительный узелN Потоки Локальная память … A1 A2 AN
  • 27. 27 Алгоритм редукции BlockReduce Вычислительный узел 1 Потоки Локальная память Вычислительный узел 2 Потоки Локальная память Вычислительный узелN Потоки Локальная память … Количество порождённых потоков:푲=푵×풏 A1 A2 AN
  • 28. 28 Алгоритм редукции BlockReduce(II этап) r[1] r[2] A[1:D] … r[3] r[4] r[5] r12 r34 r56 r[6] r r 1234 BARRIER BARRIER r 5678 r[7] r[8] r78 … … r[1] r[2] r[3] r[4] r[5] r[6] r[7] r[8] r12r34 r56r78 rr 1234 5678 … 1 2 3 4 5 6 7 8 Узел …
  • 29. 29 Алгоритм редукции BlockReduce Вычислительный узел 1 Потоки Локальная память Вычислительный узел 2 Потоки Локальная память Вычислительный узелN Потоки Локальная память … Количество порождённых потоков:푲=푵×풏 A1 A2 AN Вычислительная трудоёмкость алгоритма BlockReduce: 푻=푶(|푨|/푵+log(푵))
  • 30. 30 Алгоритм барьерной синхронизации потоков Central Counter NanjegowdaR., HernandezO., ChapmanB., JinH.ScalabilityEvaluationofBarrierAlgorithmsforOpenMP// IWOMP '09 Proceedingsofthe5th InternationalWorkshoponOpenMP: EvolvingOpenMPinanAgeofExtremeParallelism. 2009. Vol. 5568. P. 42-52
  • 31. 31 Оптимизация доступа к удалённым массивам
  • 32. 32 Объявление массивов в IBM X10 x10.lang.Rail[T] Одномерныймассив с элементами типа T Индексы типа Long Базовый класс для массивов x10.regionarray.Array[T] Многомерныймассива с элементами типа T Основан на Rail массиве
  • 33. varb: Long = a(k); // ... 33 Операции над распределёнными массивами в IBM X10 Вычислительныйузел j Вычислительныйузел i vala:Array[Long]; at(Place.place(i)) { varb: Long =a(k) // ... } Доступ к элементам удалённого массива Копирование всего массива a
  • 34. varb: Long = a(k); // ... 34 Операции над распределёнными массивами в IBM X10 Вычислительныйузел j Вычислительныйузел i vala:Array[Long]; for(iin 0..N) { at(Place.place(i)) { varb: Long =a(k) // ... } } Циклический доступ к элементам удалённого массива
  • 35. varb: Long = a(k); // ... 35 Операции над распределёнными массивами в IBM X10 Вычислительныйузел j Вычислительныйузел i vala:Array[Long]; for(iin 0..N) { at(Place.place(i)) { varb: Long =a(k) // ... } } Циклический доступ к элементам удалённого массива Копирование всего массива a
  • 36. 36 Копирование удалённых массивов как узкое место 1 valA:Array[Long] = 2 new Array[Long](length, (i:Long) => i); 3 4 finish { 5 for (iin 0..(length –1)) { 6 valplaceId:Long= i% 7 Place.MAX_PLACES; 8 at (Place.place(placeId)) async{ 9 valtmpA= A(i); 10 ... 11 } 12 } 13 }
  • 37. 37 Копирование удалённых массивов как узкое место 1 valA:Array[Long] = 2 new Array[Long](length, (i:Long) => i); 3 4 finish { 5 for (iin 0..(length –1)) { 6 valplaceId:Long= i% 7 Place.MAX_PLACES; 8 at (Place.place(placeId)) async{ 9 valtmpA= A(i); 10 ... 11 } 12 } 13 }
  • 38. 38 Копирование удалённых массивов как узкое место 1 valA:Array[Long] = 2 new Array[Long](length, (i:Long) => i); 3 4 finish { 5 for (iin 0..(length –1)) { 6 valplaceId:Long= i% 7 Place.MAX_PLACES; 8 at (Place.place(placeId)) async{ 9 valtmpA= A(i); 10 ... 11 } 12 } 13 }
  • 39. 39 Копирование удалённых массивов как узкое место 1 valA:Array[Long] = 2 new Array[Long](length, (i:Long) => i); 3 4 finish { 5 for (iin 0..(length –1)) { 6 valplaceId:Long= i% 7 Place.MAX_PLACES; 8 at (Place.place(placeId)) async{ 9 valtmpA= A(i); 10 ... 11 } 12 } 13 }
  • 40. 40 Копирование удалённых массивов как узкое место Вычислительныйузел i tmpA= A(i) Вычислительныйузел j Вычислительныйузелk A: a[1], a[2], ..., a[n] tmpA= A(i) tmpA: ... tmpA= A(i) tmpA: ...
  • 41. 41 Копирование удалённых массивов как узкое место Вычислительныйузел i tmpA= A(i) Вычислительныйузел j Вычислительныйузел k A: a[1], a[2], ..., a[n] tmpA= A(i) tmpA: ... tmpA= A(i) tmpA: ... Копирование всего массива на каждой итерации цикла
  • 42. 42 Копирование удалённых массивов как узкое место Вычислительныйузел i tmpA= A(i) Вычислительныйузел j Вычислительныйузел k A: a[1], a[2], ..., a[n] tmpA= A(i) tmpA: ... tmpA= A(i) tmpA: ... Копирование всего массива на каждой итерации цикла Алгоритм Scalar replacement?
  • 43. 43 Алгоритм ArrayPreloadоптимизациидоступа к удалённым массивам 1 valsharedA:DistArray[Array[Long]] = 2 DistArray.make[Array[Long]] 3 (Dist.makeUnique(), A); 4 5 for(iin0..(length –1)) { 6 valplaceId:Long= i% Place.MAX_PLACES; 7 at(Place.place(placeId)) async{ 8 valtmpA= sharedA(placeId)(i); 9 // ... 10 } 11 }
  • 44. 44 Алгоритм ArrayPreloadоптимизациидоступа к удалённым массивам 1 valsharedA:DistArray[Array[Long]] = 2 DistArray.make[Array[Long]] 3 (Dist.makeUnique(), A); 4 5 for(iin0..(length –1)) { 6 valplaceId:Long= i% Place.MAX_PLACES; 7 at(Place.place(placeId)) async{ 8 valtmpA= sharedA(placeId)(i); 9 // ... 10 } 11 }
  • 45. 45 Алгоритм ArrayPreloadоптимизациидоступа к удалённым массивам 1 valsharedA:DistArray[Array[Long]] = 2 DistArray.make[Array[Long]] 3 (Dist.makeUnique(), A); 4 5 for(iin0..(length –1)) { 6 valplaceId:Long= i% Place.MAX_PLACES; 7 at(Place.place(placeId)) async{ 8 valtmpA= sharedA(placeId)(i); 9 // ... 10 } 11 }
  • 46. 46 Алгоритм ArrayPreloadоптимизациидоступа к удалённым массивам Вычислительныйузел i for() { } Вычислительныйузел j Вычислительныйузел k A sharedA(0) = A for() { } sharedA(j) = A for() { } sharedA(i) = A Копирование массива один раз перед выполнением цикла
  • 47. Функциональная структура компилятора IBM Х10 47 X10 Runtime X10 Application X10 Class Libs Front End AST optimizationsAST-lowering .cu C++ Java g++/xlC g++/xlC javac Native Back End Java Back End Executable Bytecode X10 Runtime X10 Runtime C++ Natives X10 AST JVM X10 AST (Abstract Syntax Tree) X10 Runtime X10 Runtime Java Natives Источник: http://x10.codehaus.org/X10+Day
  • 48. Функциональная структура компилятора IBM Х10 48 X10 Runtime X10 Application X10 Class Libs Front End AST optimizationsAST-lowering .cu C++ Java g++/xlC g++/xlC javac Native Back End Java Back End Executable Bytecode X10 Runtime X10 Runtime C++ Natives X10 AST JVM X10 AST (Abstract Syntax Tree) X10 Runtime X10 Runtime Java Natives Источник: http://x10.codehaus.org/X10+Day Реализация ArrayPreload
  • 49. Block Loop Block At Block Call Arg Target Stmt Stmt Stmt ... ... ... Трансформация AST-дерева в алгоритме ArrayPreload 49 AST-дерево программы
  • 50. Поиск в ASTдереве подходящей конструкции Block Block At Block Call Arg Target Stmt Stmt ... ... ... Трансформация AST-дерева в алгоритме ArrayPreload 50 1 Loop Stmt AST-дерево программы
  • 51. Поискчтения массива Array[T]в цикле Поиск в ASTдереве подходящей конструкции Block Block At Block Call Arg Target Stmt Stmt ... ... ... Трансформация AST-дерева в алгоритме ArrayPreload 51 1 2 Loop Stmt AST-дерево программы
  • 52. Поискчтения массива Array[T]в цикле Поиск в ASTдереве подходящей конструкции Трансформация AST дерева Block Block At Block Call Arg Call Stmt Stmt ... ... ... Decl Arg Target Трансформация AST-дерева в алгоритме ArrayPreload 52 1 2 3 Loop Stmt AST-дерево программы
  • 53. 푻=푻풄풐풑풚푨[]×푵 for ... A(i) for ... A(i) A()={…} 푻=푻풄풐풑풚푨[] for ... A'(i) for ... A'(i) A()={…} A' = A A' = A A' = A Область j Область i Область k Область j Область i Область k A Трансформация AST-дерева в алгоритме ArrayPreload 53 Block Block At Block Call Arg Call Stmt Stmt ... ... ... Decl Arg Target Loop Stmt AST-дерево
  • 54. Организация экспериментов (алгоритмBlockReduce) 54 Конфигурация подсистемы Кластер А: 16 узлов 2 x IntelXeonE5420 2.5 GHz(8 процессорных ядер на узел), 25 GiB, сетьGigabit Ethernet Кластер B: 6 узлов 2 x IntelXeonE5620 2.4 GHz(8 процессорных ядер на узел), 8 GiB, сеть InfiniBandQDR Описание тестовых программ Синтетический тест: 푅=100операций редукции Размер массива 퐷=4000,8000,…,20000элементов Chapel-программа PTRANS–транспонирование распределённых матриц Chapel-программа miniMD–молекулярная динамика
  • 55. 55 Результаты экспериментов(алгоритмBlockReduce) R= 100операций редукции массива A[1:D], 4узла кластера Jet t, c D BlockReduce DefReduce
  • 56. 56 Результаты экспериментов(алгоритмBlockReduce) R= 100операций редукции массива A[1:D], 8узлов кластера Jet t, c D BlockReduce DefReduce
  • 57. Программа miniMD, Nузлов кластера Jet 57 Результаты экспериментов(алгоритмBlockReduce) t, c N BlockReduce DefReduce
  • 58. 58 Результаты экспериментов(алгоритмBlockReduce) Программа PTRANS, Nузлов кластера Jet t, c N BlockReduce DefReduce
  • 59. Организация экспериментов(алгоритм ArrayPreload) 59 Конфигурация подсистемы Кластер А: 16 узлов 2 x IntelXeonE5420 2.5 GHz(8 процессорных ядер на узел), 25 GiB, сетьGigabit Ethernet КластерB: 6 узлов 2 x IntelXeonE5620 2.4 GHz(8 процессорных ядер на узел), 8 GiB, сеть InfiniBandQDR Описание тестовой программы Тест циклического (Round-robin) обращения к массиву Размер массива D{40000, 4000, 400, 40}элементов Количество обращений к массиву R{40000, 4000, 400, 40} Массив Array[Long] Условия запуска Количество потоков на один узел: 8 C++ Backend
  • 60. 60 Результаты экспериментов. Алгоритм Scalar replacement Кластер А, Сеть Gigabit Ethernet s N D= 40000, R= 40000 D= 40000, R= 4000 D= 40000, R= 4000 D= 40000, R= 40
  • 61. 61 Результаты экспериментов. Алгоритм ArrayPreload Кластер А, Сеть Gigabit Ethernet s N D= 40000, R= 40000 D= 40000, R= 4000 D= 40000, R= 4000 D= 40000, R= 40
  • 62. 62 Результаты экспериментов. Алгоритм ArrayPreload Кластер В, Сеть InfinibandQDR s N D= 40000, R= 40000 D= 40000, R= 4000 D= 40000, R= 4000 D= 40000, R= 40
  • 63. 63 Результаты экспериментов. Алгоритм ArrayPreload Кластер В, Сеть InfinibandQDR s N D= 40000, R= 40000 D= 4000, R= 40000 D= 400, R= 40000 D= 40, R= 40000
  • 64. 64 Предложены алгоритмы BlockReduceи ArrayPreloadоптимизации информационных обменов в параллельных PGAS-программах. Алгоритмы реализован для языков Cray Chapelи IBM X10. Алгоритм BlockReduceобеспечивает сокращение времени выполнения операции редукции на 5-10% для массивов большого размера (D> 10000). Алгоритм ArrayPreloadпредварительного копирования элементов удалённых массивов позволяет сократить время выполнения циклического доступа в среднем от 2 до 80 раз. ArrayPreloadэффективен для программ, выполняющих обращение к массивам большого размера (D> 5000)в циклах с большим числом итераций(R> 500). Результаты
  • 65. 65 Разработка алгоритмов реализации коллективных операций в PGAS-языках с учётом типа распределения элементов массива между узлами. Создание алгоритмов оптимизации доступа к удалённым массивам по результатам предварительного профилирования PGAS-программ (profile guided optimization). Развитие эвристических алгоритмов предварительного распределения данных по узлам распределённой ВС. Применение алгоритмов компиляторной оптимизации для разрешения проблем согласованности памяти при выполнении операций с распределёнными массивами. Разработка алгоритмов кэширования для PGAS-программ. Направления дальнейших исследований
  • 66. Спасибо за внимание! Пазников А.А.apaznikov@gmail.com https://bitbucket.org/apaznikov/chapel Кулагин И.И.ivan.i.kulagin@gmail.com КурносовМ.Г. mkurnosov@gmail.com
  • 68. 68 Алгоритм редукции BlockReduce(I этап) Входныеданные: A[1:D] –распределённый массив, –ассоциативная операция редукции. Выходные данные: r–результатпримененияредукциидляA. 1 coforalliin[1,2,…,N] do // N–число узлов 2 oni 3 SPLITDOMAIN(Ai, n) // Разбиение на n блоков 4 //по числу процессорных ядер 5 coforalltin[1,2, …,n] do 6 foreachx inAitdo 7 rit= ritx 8 foreachtin[1,2…,n] do 9 ri= ririt
  • 69. 69 Алгоритм редукции BlockReduce(I этап) Входныеданные: A[1:D] –распределённый массив, –ассоциативная операция редукции. Выходные данные: r–результатпримененияредукциидляA. 1 coforalliin[1,2,…,N] do // N–число узлов 2 oni 3 SPLITDOMAIN(Ai, n) // Разбиение на n блоков 4 //по числу процессорных ядер 5 coforalltin[1,2, …,n] do 6 foreachx inAitdo 7 rit= ritx 8 foreachtin[1,2…,n] do 9 ri= ririt
  • 70. 70 Алгоритм редукции BlockReduce(I этап) Входныеданные: A[1:D] –распределённый массив, –ассоциативная операция редукции. Выходные данные: r–результатпримененияредукциидляA. 1 coforalliin[1,2,…,N] do // N–число узлов 2 oni 3 SPLITDOMAIN(Ai, n) // Разбиение на n блоков 4 //по числу процессорных ядер 5 coforalltin[1,2, …,n] do 6 foreachx inAitdo 7 rit= ritx 8 foreachtin[1,2…,n] do 9 ri= ririt
  • 71. 71 Алгоритм редукции BlockReduce(I этап) Входныеданные: A[1:D] –распределённый массив, –ассоциативная операция редукции. Выходные данные: r–результатпримененияредукциидляA. 1 coforalliin[1,2,…,N] do // N–число узлов 2 oni 3 SPLITDOMAIN(Ai, n) // Разбиение на n блоков 4 //по числу процессорных ядер 5 coforalltin[1,2, …,n] do 6 foreachx inAitdo 7 rit= ritx 8 foreachtin[1,2…,n] do 9 ri= ririt
  • 72. 72 Алгоритм редукции BlockReduce(I этап) Входныеданные: A[1:D] –распределённый массив, –ассоциативная операция редукции. Выходные данные: r–результатпримененияредукциидляA. 1 coforalliin[1,2,…,N] do // N–число узлов 2 oni 3 SPLITDOMAIN(Ai, n) // Разбиение на n блоков 4 //по числу процессорных ядер 5 coforalltin[1,2, …,n] do 6 foreachx inAitdo 7 rit= ritx 8 foreachtin[1,2…,n] do 9 ri= ririt
  • 73. 73 Алгоритм редукции BlockReduce(I этап) Входныеданные: A[1:D] –распределённый массив, –ассоциативная операция редукции. Выходные данные: r–результатпримененияредукциидляA. 1 coforalliin[1,2,…,N] do // N–число узлов 2 oni 3 SPLITDOMAIN(Ai, n) // Разбиение на n блоков 4 //по числу процессорных ядер 5 coforalltin[1,2, …,n] do 6 foreachx inAitdo 7 rit= ritx 8 foreachtin[1,2…,n] do 9 ri= ririt
  • 74. 74 Алгоритм редукции BlockReduce(II этап) Входныеданные: A[1:D] –распределённый массив, –ассоциативная операция редукции. Выходные данные: r–результатпримененияредукциидляA. … 9 while N> 1 do 10 while i+1<Ndo 11 begin 12 onri 13 ri= riri+1 14 i= i+ 2 15 BARRIER([1, 2, …, N]) // Барьерная синхронизация потоков 16 REFRESH(N) // Обновление числа NВУ 17 returnr
  • 75. 75 Алгоритм редукции BlockReduce(II этап) Входныеданные: A[1:D] –распределённый массив, –ассоциативная операция редукции. Выходные данные: r–результатпримененияредукциидляA. … 9 while N> 1 do 10 while i+1<Ndo 11 begin 12 onri 13 ri= riri+1 14 i= i+ 2 15 BARRIER([1, 2, …, N]) // Барьерная синхронизация потоков 16 REFRESH(N) // Обновление числа NВУ 17 returnr
  • 76. 76 Алгоритм редукции BlockReduce(II этап) Входныеданные: A[1:D] –распределённый массив, –ассоциативная операция редукции. Выходные данные: r–результатпримененияредукциидляA. … 9 while N> 1 do 10 while i+1<Ndo 11 begin 12 onri 13 ri= riri+1 14 i= i+ 2 15 BARRIER([1, 2, …, N]) // Барьерная синхронизация потоков 16 REFRESH(N) // Обновление числа NВУ 17 returnr
  • 77. 77 Алгоритм редукции BlockReduce(II этап) Входныеданные: A[1:D] –распределённый массив, –ассоциативная операция редукции. Выходные данные: r–результатпримененияредукциидляA. … 9 while N> 1 do 10 while i+1<Ndo 11 begin 12 onri 13 ri= riri+1 14 i= i+ 2 15 BARRIER([1, 2, …, N]) // Барьерная синхронизация потоков 16 REFRESH(N) // Обновление числа NВУ 17 returnr
  • 78. 78 Определение распределённых массивов в IBM X10 valA:DistArray[Long] = DistArray.make[Long](Dist.makeUnique(), (p: Point) => {here.id}); Вычислительный узел 1 Потоки Локальная память Вычислительный узел 2 Потоки Локальная память Вычислительный узелN Потоки Локальная память … A1 A2 AN A: