78
Кулагин И.И., Пазников А.А., Курносов М.Г. Институт физики полупроводников им. А.В. Ржанова СО РАН Оптимизация информационных обменов в параллельных PGAS-программах 3-я Всероссийская научно-техническая конференция «Суперкомпьютерные технологии» (СКТ-2014) 29 сентября – 4 октября 2014 г., с. Дивноморское

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

Embed Size (px)

DESCRIPTION

Доклад Кулагина И.И., Пазникова А.А., Курносова М.Г. "Оптимизация информационных обменов в параллельных PGAS-программах" на 3-й Всероссийской научно-технической конференции «Суперкомпьютерные технологии» (СКТ-2014) 29 сентября – 4 октября 2014 г., с. Дивноморское

Citation preview

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

Кулагин И.И., Пазников А.А., Курносов М.Г.

Институт физики полупроводников

им. А.В. Ржанова СО РАН

Оптимизация информационных обменов в параллельных PGAS-программах

3-я Всероссийская научно-техническая конференция

«Суперкомпьютерные технологии» (СКТ-2014)

29 сентября – 4 октября 2014 г., с. Дивноморское

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

Общая память(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

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

3

Глобальное разделённое адресное пространство (PGAS)

HPF, Co-array Fortran, Titanium, UPC, IBM X10, Cray Chapel

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

Основные программные конструкции PGAS-языков

4

begin S – асинхронное выполнение инструкций Sв отдельном потоке на вычислительном узле, с которого вызвана конструкция

on i S – выполнение инструкций S на узле i

on x S – выполнение инструкций S на том узле, в памяти которого находится объект x

coforall S – выполнение каждой итерации тела Sцикла в независимом потоке

sync T – синхронизация группы потоков T

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

Основные программные конструкции PGAS-языков

5

begin S – асинхронное выполнение инструкций S в отдельном потоке на вычислительном узле, с которого вызвана конструкция

Вычислительный узел i

begin {stmt 1stmt 2

…stmt k

}…

stmt 1stmt 2

…stmt k

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

Основные программные конструкции PGAS-языков

6

on i S – выполнение инструкций S на узле i

Вычислительныйузел j

Вычислительныйузел i

on i {stmt 1stmt 2

…stmt k

}

stmt 1stmt 2

…stmt k

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

Основные программные конструкции PGAS-языков

7

coforall S – выполнение каждой итерации тела S цикла в независимом потоке

Вычислительный узел i

coforall {stmt 1stmt 2

…stmt k

}…

stmt 1stmt 2

…stmt k

stmt 1stmt 2

…stmt k

stmt 1stmt 2

…stmt k

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

Основные программные конструкции PGAS-языков

8

sync T – синхронизация группы потоков T

Вычислительный узел i

stmt 1stmt 2

…stmt k

stmt 1stmt 2

…stmt k

Вычислительный узел jbarrier T

stmt 1stmt 2

…stmt k

stmt 1stmt 2

…stmt k …

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

Основные программные конструкции PGAS-языков

9

Параллелизм уровня потоков

порождение задач (begin, on)

параллельные циклы (coforall)

примитивы синхронизации (sync)

Параллелизм уровня данных

коллективные операции (редукция, префиксная сумма) над массивами

распределённые структуры (проблемы размещения, оптимизация доступа)

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

Основные программные конструкции PGAS-языков

10

Параллелизм уровня потоков

порождение задач (begin, on)

параллельные циклы (coforall)

примитивы синхронизации (sync)

Параллелизм уровня данных

коллективные операции (редукция, префиксная сумма) над массивами

распределённые структуры (проблемы размещения, оптимизация доступа)

1

2

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

11

Оптимизация выполнения редукции распределённых массивов

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

12

Распределённые массивы (distributed arrays)

A:

Вычислительный узел 1

Потоки

Локальная память

Вычислительный узел 2

Потоки

Локальная память

Вычислительный узел N

Потоки

Локальная память

A1 A2 AN

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

13

Параллельная редукция (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

Редукция одномерного массива А:

Пример для операции сложения:

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

14

Параллельная редукция распределённого массива

Rabenseifner R. Optimization of Collective Reduction Operations // Computational Science -

ICCS 2004 - Lecture Notes in Computer Science. 2004. Vol. 3036. P. 1-9.

Li S, Hoefler T., Snir M. NUMA-Aware Shared-Memory Collective Communication for MPI //

HPDC 2013. 2013. P. 85-96.

A: 2 0 1 3

Локальная память

Локальная память

Локальная память

A1 A2 A32 0 1 3 2 0 1 3

reduce(A, +)

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

15

Параллельная редукция (reduce, reduction)

Rabenseifner R. Optimization of Collective Reduction Operations // Computational Science -

ICCS 2004 - Lecture Notes in Computer Science. 2004. Vol. 3036. P. 1-9.

Li S, Hoefler T., Snir M. NUMA-Aware Shared-Memory Collective Communication for MPI //

HPDC 2013. 2013. P. 85-96.

A:

Вычислительный узел 1

2 0 1 3

Локальная память

Вычислительный узел 2

Локальная память

Вычислительный узел N

Локальная память

A1 A2 A32 0 1 3 2 0 1 3

A: 2 0 1 3

Локальная память

Локальная память

Локальная память

A1 A2 A32 0 1 3 2 0 1 3

r = 38

reduce(A, +)

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

16

Параллельная редукция (reduce, reduction)

Rabenseifner R. Optimization of Collective Reduction Operations // Computational Science -

ICCS 2004 - Lecture Notes in Computer Science. 2004. Vol. 3036. P. 1-9.

Li S, Hoefler T., Snir M. NUMA-Aware Shared-Memory Collective Communication for MPI //

HPDC 2013. 2013. P. 85-96.

A:

Вычислительный узел 1

2 0 1 3

Локальная память

Вычислительный узел 2

Локальная память

Вычислительный узел N

Локальная память

A1 A2 A32 0 1 3 2 0 1 3

A: 2 0 1 3

Локальная память

Локальная память

Локальная память

A1 A2 A32 0 1 3 2 0 1 3

r = 38

reduce(A, +)Результат редукции

Распределённый массив

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

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 }17

Пример редукции в Cray Chapel

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

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 }18

Пример редукции в Cray Chapel

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

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 }19

Пример редукции в Cray Chapel

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

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 }20

Пример редукции в Cray Chapel

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

21

Алгоритм редукции DefaultReduce

Вычислительный узел 1

Потоки

Локальная память

Вычислительный узел 2

Потоки

Локальная память

Вычислительный узел N

Потоки

Локальная память

A1 A2 AN

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

22

Алгоритм редукции DefaultReduce

Вычислительный узел 1

Потоки

Локальная память

Вычислительный узел 2

Потоки

Локальная память

Вычислительный узел N

Потоки

Локальная память

Вычислительная трудоёмкость алгоритма DefaultReduce:𝑻 = 𝑶(|𝑨| / 𝑵 + 𝑵)

A1 A2 AN

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

23

Алгоритм редукции DefaultReduce

Вычислительный узел 1

Потоки

Локальная память

Вычислительный узел 2

Потоки

Локальная память

Вычислительный узел N

Потоки

Локальная память

Вычислительная трудоёмкость алгоритма DefaultReduce:𝑻 = 𝑶(|𝑨| / 𝑵 + 𝑵)

Количество порождённых потоков: 𝑲 = |𝑨|

A1 A2 AN

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

24

Алгоритм редукции BlockReduce

Вычислительный узел 1

Потоки

Локальная память

Вычислительный узел 2

Потоки

Локальная память

Вычислительный узел N

Потоки

Локальная память

A1 A2 AN

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

25

Алгоритм редукции BlockReduce

Вычислительный узел 1

Потоки

Локальная память

Вычислительный узел 2

Потоки

Локальная память

Вычислительный узел N

Потоки

Локальная память

A1 A2 AN

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

26

Алгоритм редукции BlockReduce

Вычислительный узел 1

Потоки

Локальная память

Вычислительный узел 2

Потоки

Локальная память

Вычислительный узел N

Потоки

Локальная память

A1 A2 AN

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

27

Алгоритм редукции BlockReduce

Вычислительный узел 1

Потоки

Локальная память

Вычислительный узел 2

Потоки

Локальная память

Вычислительный узел N

Потоки

Локальная память

Количество порождённых потоков: 𝑲 = 𝑵× 𝒏

A1 A2 AN

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

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

r5678

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 r1234

5678

1 2 3 4 5 6 7 8Узел …

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

29

Алгоритм редукции BlockReduce

Вычислительный узел 1

Потоки

Локальная память

Вычислительный узел 2

Потоки

Локальная память

Вычислительный узел N

Потоки

Локальная память

Количество порождённых потоков: 𝑲 = 𝑵× 𝒏

A1 A2 AN

Вычислительная трудоёмкость алгоритма BlockReduce:𝑻 = 𝑶(|𝑨| / 𝑵 + log(𝑵))

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

30

Алгоритм барьерной синхронизации потоков Central Counter

Nanjegowda R., Hernandez O., Chapman B., Jin H. Scalability Evaluation of Barrier Algorithms forOpenMP // IWOMP '09 Proceedings of the 5th International Workshop on OpenMP: Evolving OpenMPin an Age of Extreme Parallelism. 2009. Vol. 5568. P. 42-52

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

31

Оптимизация доступа к удалённым массивам

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

32

Объявление массивов в IBM X10

x10.lang.Rail[T]

Одномерный массив с элементами типа T

Индексы типа Long

Базовый класс для массивов

x10.regionarray.Array[T]

Многомерный массива с элементами типа T

Основан на Rail массиве

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

var b: Long = a(k);

// ...

33

Операции над распределёнными массивами в IBM X10

Вычислительныйузел j

Вычислительныйузел i

val a:Array[Long];

at(Place.place(i)) {var b:

Long = a(k)// ...

}

Доступ к элементам удалённого массива

Копирование всего массива a

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

var b: Long = a(k);

// ...

34

Операции над распределёнными массивами в IBM X10

Вычислительныйузел j

Вычислительныйузел i

val a:Array[Long];

for (i in 0..N) {at(Place.place(i)) {var b:

Long = a(k)// ...

}}

Циклический доступ к элементам удалённого массива

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

var b: Long = a(k);

// ...

35

Операции над распределёнными массивами в IBM X10

Вычислительныйузел j

Вычислительныйузел i

val a:Array[Long];

for (i in 0..N) {at(Place.place(i)) {var b:

Long = a(k)// ...

}}

Циклический доступ к элементам удалённого массива

Копирование всего массива a

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

36

Копирование удалённых массивов как узкое место

1 val A:Array[Long] =

2 new Array[Long](length, (i:Long) => i);

3

4 finish {

5 for (i in 0..(length – 1)) {

6 val placeId:Long = i %

7 Place.MAX_PLACES;

8 at (Place.place(placeId)) async {

9 val tmpA = A(i);

10 ...

11 }

12 }

13 }

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

37

Копирование удалённых массивов как узкое место

1 val A:Array[Long] =

2 new Array[Long](length, (i:Long) => i);

3

4 finish {

5 for (i in 0..(length – 1)) {

6 val placeId:Long = i %

7 Place.MAX_PLACES;

8 at (Place.place(placeId)) async {

9 val tmpA = A(i);

10 ...

11 }

12 }

13 }

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

38

Копирование удалённых массивов как узкое место

1 val A:Array[Long] =

2 new Array[Long](length, (i:Long) => i);

3

4 finish {

5 for (i in 0..(length – 1)) {

6 val placeId:Long = i %

7 Place.MAX_PLACES;

8 at (Place.place(placeId)) async {

9 val tmpA = A(i);

10 ...

11 }

12 }

13 }

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

39

Копирование удалённых массивов как узкое место

1 val A:Array[Long] =

2 new Array[Long](length, (i:Long) => i);

3

4 finish {

5 for (i in 0..(length – 1)) {

6 val placeId:Long = i %

7 Place.MAX_PLACES;

8 at (Place.place(placeId)) async {

9 val tmpA = A(i);

10 ...

11 }

12 }

13 }

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

40

Копирование удалённых массивов как узкое место

Вычислительныйузел i

tmpA = A(i)

Вычислительныйузел j

Вычислительныйузел k

A: a[1], a[2],

..., a[n]

tmpA = A(i)

tmpA: ...

tmpA = A(i)

tmpA: ...

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

41

Копирование удалённых массивов как узкое место

Вычислительныйузел i

tmpA = A(i)

Вычислительныйузел j

Вычислительныйузел k

A: a[1], a[2],

..., a[n]

tmpA = A(i)

tmpA: ...

tmpA = A(i)

tmpA: ...

Копирование всего массива на каждой итерации цикла

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

42

Копирование удалённых массивов как узкое место

Вычислительныйузел i

tmpA = A(i)

Вычислительныйузел j

Вычислительныйузел k

A: a[1], a[2],

..., a[n]

tmpA = A(i)

tmpA: ...

tmpA = A(i)

tmpA: ...

Копирование всего массива на каждой итерации цикла

Алгоритм Scalar replacement

?

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

43

Алгоритм ArrayPreload оптимизациидоступа к удалённым массивам

1 val sharedA: DistArray[Array[Long]] =

2 DistArray.make[Array[Long]]

3 (Dist.makeUnique(), A);

4

5 for (i in 0..(length – 1)) {

6 val placeId:Long = i % Place.MAX_PLACES;

7 at (Place.place(placeId)) async {

8 val tmpA = sharedA(placeId)(i);

9 // ...

10 }

11 }

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

44

Алгоритм ArrayPreload оптимизациидоступа к удалённым массивам

1 val sharedA: DistArray[Array[Long]] =

2 DistArray.make[Array[Long]]

3 (Dist.makeUnique(), A);

4

5 for (i in 0..(length – 1)) {

6 val placeId:Long = i % Place.MAX_PLACES;

7 at (Place.place(placeId)) async {

8 val tmpA = sharedA(placeId)(i);

9 // ...

10 }

11 }

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

45

Алгоритм ArrayPreload оптимизациидоступа к удалённым массивам

1 val sharedA: DistArray[Array[Long]] =

2 DistArray.make[Array[Long]]

3 (Dist.makeUnique(), A);

4

5 for (i in 0..(length – 1)) {

6 val placeId:Long = i % Place.MAX_PLACES;

7 at (Place.place(placeId)) async {

8 val tmpA = sharedA(placeId)(i);

9 // ...

10 }

11 }

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

46

Алгоритм ArrayPreload оптимизациидоступа к удалённым массивам

Вычислительныйузел i

for () {

}

Вычислительныйузел j

Вычислительныйузел k

A

sharedA(0) = A

for () {

}

sharedA(j) = A

for () {

}

sharedA(i) = A

Копирование массива один раз перед выполнением цикла

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

Функциональная структура компилятора IBM Х10

47

X10 Runtime

X10 Application

X10 Class Libs

Front EndAST optimizations

AST-lowering

.cuC++ Java

g++/xlC g++/xlC javac

Native Back End Java Back End

Executable BytecodeX10 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

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

Функциональная структура компилятора IBM Х10

48

X10 Runtime

X10 Application

X10 Class Libs

Front EndAST optimizations

AST-lowering

.cuC++ Java

g++/xlC g++/xlC javac

Native Back End Java Back End

Executable BytecodeX10 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

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

Block

Loop

Block

At

Block

Call

Arg Target

Stmt

Stmt

Stmt

...

...

...

Трансформация AST-дерева в алгоритме ArrayPreload

49

AST-дерево программы

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

Поиск в AST дереве подходящей конструкции

Block

Block

At

Block

Call

Arg Target

Stmt

Stmt

...

...

...

Трансформация AST-дерева в алгоритме ArrayPreload

50

1LoopStmt

AST-дерево программы

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

Поиск чтения массива Array[T] в цикле

Поиск в AST дереве подходящей конструкции

Block

Block

At

Block

Call

Arg Target

Stmt

Stmt

...

...

...

Трансформация AST-дерева в алгоритме ArrayPreload

51

1

2

LoopStmt

AST-дерево программы

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

Поиск чтения массива Array[T] в цикле

Поиск в AST дереве подходящей конструкции

Трансформация AST дерева

Block

Block

At

Block

Call

Arg Call

Stmt

Stmt

...

...

...

Decl

Arg

Target

Трансформация AST-дерева в алгоритме ArrayPreload

52

1

2

3

LoopStmt

AST-дерево программы

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

𝑻 = 𝑻𝒄𝒐𝒑𝒚 𝑨[ ] × 𝑵

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

LoopStmt

AST-дерево

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

Организация экспериментов (алгоритм BlockReduce)

54

Конфигурация подсистемы

Кластер А: 16 узлов 2 x Intel Xeon E5420 2.5 GHz(8 процессорных ядер на узел), 25 GiB, сеть Gigabit Ethernet

Кластер B: 6 узлов 2 x Intel Xeon E5620 2.4 GHz(8 процессорных ядер на узел), 8 GiB, сеть InfiniBand QDR

Описание тестовых программ

Синтетический тест: 𝑅 = 100 операций редукции

Размер массива 𝐷 = 4000, 8000,… , 20000 элементов

Chapel-программа PTRANS – транспонирование распределённых матриц

Chapel-программа miniMD – молекулярная динамика

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

55

Результаты экспериментов (алгоритм BlockReduce)

R = 100 операций редукции массива A[1:D], 4 узла кластера Jet

t, c

D

BlockReduce DefReduce

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

56

Результаты экспериментов (алгоритм BlockReduce)

R = 100 операций редукции массива A[1:D], 8 узлов кластера Jet

t, c

D

BlockReduce DefReduce

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

Программа miniMD, N узлов кластера Jet

57

Результаты экспериментов (алгоритм BlockReduce)

t, c

N

BlockReduce DefReduce

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

58

Результаты экспериментов (алгоритм BlockReduce)

Программа PTRANS, N узлов кластера Jet

t, c

N

BlockReduce DefReduce

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

Организация экспериментов (алгоритм ArrayPreload)

59

Конфигурация подсистемы

Кластер А: 16 узлов 2 x Intel Xeon E5420 2.5 GHz(8 процессорных ядер на узел), 25 GiB, сеть Gigabit Ethernet

Кластер B: 6 узлов 2 x Intel Xeon E5620 2.4 GHz(8 процессорных ядер на узел), 8 GiB, сеть InfiniBand QDR

Описание тестовой программы

Тест циклического (Round-robin) обращения к массиву

Размер массива D {40000, 4000, 400, 40} элементов

Количество обращений к массиву R {40000, 4000, 400, 40}

Массив Array[Long]

Условия запуска

Количество потоков на один узел: 8

C++ Backend

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

60

Результаты экспериментов. Алгоритм Scalar replacement

Кластер А, Сеть Gigabit Ethernets

N

D = 40000, R = 40000

D = 40000, R = 4000

D = 40000, R = 4000

D = 40000, R = 40

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

61

Результаты экспериментов. Алгоритм ArrayPreload

Кластер А, Сеть Gigabit Ethernets

N

D = 40000, R = 40000

D = 40000, R = 4000

D = 40000, R = 4000

D = 40000, R = 40

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

62

Результаты экспериментов. Алгоритм ArrayPreload

Кластер В, Сеть Infiniband QDRs

N

D = 40000, R = 40000

D = 40000, R = 4000

D = 40000, R = 4000

D = 40000, R = 40

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

63

Результаты экспериментов. Алгоритм ArrayPreload

Кластер В, Сеть Infiniband QDRs

N

D = 40000, R = 40000

D = 4000, R = 40000

D = 400, R = 40000

D = 40, R = 40000

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

64

Предложены алгоритмы BlockReduce и ArrayPreloadоптимизации информационных обменов в параллельных PGAS-программах. Алгоритмы реализован для языков Cray Chapel и IBM X10.

Алгоритм BlockReduce обеспечивает сокращение времени выполнения операции редукции на 5-10% для массивов большого размера (D > 10000).

Алгоритм ArrayPreload предварительного копирования элементов удалённых массивов позволяет сократить время выполнения циклического доступа в среднем от 2 до 80 раз.

ArrayPreload эффективен для программ, выполняющих обращение к массивам большого размера (D > 5000) в циклах с большим числом итераций (R > 500).

Результаты

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

65

Разработка алгоритмов реализации коллективных операций в PGAS-языках с учётом типа распределения элементов массива между узлами.

Создание алгоритмов оптимизации доступа к удалённым массивам по результатам предварительного профилирования PGAS-программ (profile guided optimization).

Развитие эвристических алгоритмов предварительного распределения данных по узлам распределённой ВС.

Применение алгоритмов компиляторной оптимизации для разрешения проблем согласованности памяти при выполнении операций с распределёнными массивами.

Разработка алгоритмов кэширования для PGAS-программ.

Направления дальнейших исследований

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

Спасибо за внимание!

Пазников А.А. [email protected]

https://bitbucket.org/apaznikov/chapel

Кулагин И.И. [email protected]

Курносов М.Г. [email protected]

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

67

Backup-слайды

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

68

Алгоритм редукции 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 // по числу процессорных ядер

5 coforall t in [1, 2, …, n] do

6 foreach x in Ait do

7 rit = rit x

8 foreach t in [1, 2…, n] do

9 ri = ri rit

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

69

Алгоритм редукции 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 // по числу процессорных ядер

5 coforall t in [1, 2, …, n] do

6 foreach x in Ait do

7 rit = rit x

8 foreach t in [1, 2…, n] do

9 ri = ri rit

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

70

Алгоритм редукции 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 // по числу процессорных ядер

5 coforall t in [1, 2, …, n] do

6 foreach x in Ait do

7 rit = rit x

8 foreach t in [1, 2…, n] do

9 ri = ri rit

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

71

Алгоритм редукции 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 // по числу процессорных ядер

5 coforall t in [1, 2, …, n] do

6 foreach x in Ait do

7 rit = rit x

8 foreach t in [1, 2…, n] do

9 ri = ri rit

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

72

Алгоритм редукции 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 // по числу процессорных ядер

5 coforall t in [1, 2, …, n] do

6 foreach x in Ait do

7 rit = rit x

8 foreach t in [1, 2…, n] do

9 ri = ri rit

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

73

Алгоритм редукции 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 // по числу процессорных ядер

5 coforall t in [1, 2, …, n] do

6 foreach x in Ait do

7 rit = rit x

8 foreach t in [1, 2…, n] do

9 ri = ri rit

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

74

Алгоритм редукции 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

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

75

Алгоритм редукции 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

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

76

Алгоритм редукции 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

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

77

Алгоритм редукции 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

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

78

Определение распределённых массивов в IBM X10

val A: DistArray[Long] = DistArray.make[Long](Dist.makeUnique(), (p: Point) => {here.id});

Вычислительный узел 1

Потоки

Локальная память

Вычислительный узел 2

Потоки

Локальная память

Вычислительный узел N

Потоки

Локальная память

A1 A2 ANA: