Суперкомпьютеры параллельная обработка...

120
Суперкомпьютеры и параллельная обработка данных Бахтин Владимир Александрович Бахтин Владимир Александрович к.ф.-м.н., ведущий научный сотрудник Института прикладной математики им М.В.Келдыша РАН доцент кафедра системного программирования факультет вычислительной математики и факультет вычислительной математики и кибернетики Московского университета им. М.В. Ломоносова

Upload: others

Post on 12-Jan-2020

12 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Суперкомпьютеры и параллельная обработка данных

Бахтин Владимир АлександровичБахтин Владимир Александровичк.ф.-м.н., ведущий научный сотрудник Института прикладной математики им М.В.Келдыша РАНдоцент кафедра системного программирования факультет вычислительной математики ифакультет вычислительной математики и кибернетики Московского университета им. М.В. Ломоносова

Page 2: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Содержание

Введение в предмет Тенденции развития современных вычислительных систем OpenMP – модель параллелизма по управлению Конструкции распределения работы Конструкции для синхронизации нитей Система поддержки выполнения OpenMP-программ. Новые возможности OpenMP

5 сентябряМосква, 2019 Суперкомпьютеры и параллельная обработка данных 2 из 274

Page 3: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Тематический план учебной дисциплины

Введение в предмет Архитектура параллельных вычислительных системМетоды оценки производительности параллельных вычислительных систем

Технологии параллельного программирования Введение в теорию анализа структуры программ и алгоритмов

В Введение в параллельные методы решения задач

5 сентябряМосква, 2019 Суперкомпьютеры и параллельная обработка данных 3 из 274

Page 4: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Литература

Лацис А.О. Параллельная обработка данных: учеб. пособие ц р р д удля студ. вузов. Издательский центр «Академия». 2010. Издательство: Академия

Якобовский М.В. Введение в параллельные методы решения задач. Учебное пособие. Серия: «Суперкомпьютерное образование» Издательство МГУ 2013образование». Издательство МГУ. 2013.

Вл. В. Воеводин, В. В. Воеводин. Параллельные вычисления — СПб., БХВ-Петербург, 2002, 608 с.С б , е ербур , 00 , 608 с

Антонов А.С. Технологии параллельного программирования MPI и OpenMP: Учеб. пособие. Предисл.: В.А.Садовничий. -Серия «Суперкомпьютерное образование». М.: Издательство Московского университета, 2012.-344 с.

5 сентябряМосква, 2019 Суперкомпьютеры и параллельная обработка данных 4 из 274

Page 5: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Суперкомпьютеры – что это?

Суперкомпьютером называется вычислительная система, б й йвычислительное быстродействие которой многократно выше, чем у

современных ей комьютеров массового выпуска.

5 сентябряМосква, 2019 5 из 274

Page 6: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Суперкомпьютеры – что это?

Суперкомпьютеры – это компьютеры, которые работают значительно быстрее остальной массы современных компьютеровбыстрее остальной массы современных компьютеров

Суперкомпьютеры – это компьютеры, которые занимают большой зал Суперкомпьютеры – это компьютеры, которые весят больше 1 тонныу р р р , р Суперкомпьютеры – это компьютеры, которые стоят больше 1

млн.долл. Суперкомпьютеры – это компьютеры, которые сводят проблему

вычислений к проблеме ввода/вывода Суперкомпьютеры – это компьютеры, мощности которых лишь Суперкомпьютеры это компьютеры, мощности которых лишь

немного не хватает для решения актуальных вычислительно сложных задач

5 сентябряМосква, 2019 Суперкомпьютеры и параллельная обработка данных 6 из 274

Page 7: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Cуперкомпьютерные системы (Top500)

5 сентябряМосква, 2019 Суперкомпьютеры и параллельная обработка данных 7 из 274

Page 8: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Производительность компьютеров. Тест Linpack

Тест Linpack - решение системы линейных алгебраических уравнений с плотной матрицейс плотной матрицей.1. Матрица 100*100, фиксированный текст программы.2. Linpack TPP: матрица 1000*1000, можно менять метод и текст p р ц , дпрограммы. Сложность : 2n3/3+2n2.3. High Performance Linpack: матрица любого размера, множество дополнительных параметровдополнительных параметров.

5 сентябряМосква, 2019 Суперкомпьютеры и параллельная обработка данных 8 из 274

Page 9: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Суперкомпьютерные системы (Top500)

5 сентябряМосква, 2019 Суперкомпьютеры и параллельная обработка данных 9 из 274

Page 10: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Поколения архитектур и парадигмы программированияСередина 70-х годов.

Векторно-конвейерные компьютерыр р р

Особенности архитектуры: векторныефункциональные устройства,функциональные устройства, зацепление функциональных устройств, векторные команды в системе команд векторные регистрысистеме команд, векторные регистры. Программирование: векторизация самых внутренних циклов.

Cray Fortran первый компилятор с Fortran векторизацией

Суперкомпьютер Cray-1Пиковая производительность

5 сентябряМосква, 2019 Суперкомпьютеры и параллельная обработка данных 10 из 274

машины — 133 Мфлопса.

Page 11: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Поколения архитектур и парадигмы программированияНачало 80-х годов.Векторно-параллельные компьютеры

Особенности архитектуры: векторные функциональные устройства, зацепление функциональныхзацепление функциональных устройств, векторные команды в системе команд, векторные регистрырегистры. Небольшое число процессоров объединяются над общей памятьюнад общей памятью. Программирование: векторизация самых внутренних циклов и распараллеливание на внешнем уровне, единое адресное пространство, локальные и

Суперкомпьютеры Cray X-MP, Cray Y-MP

5 сентябряМосква, 2019 Суперкомпьютеры и параллельная обработка данных 11 из 274

глобальные переменные.

Page 12: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Поколения архитектур и парадигмы программированияНачало 90-х годов.Массивно-параллельные компьютеры

Особенности архитектуры: тысячи процессоров объединяются с помощью коммуникационной сети по некоторойкоммуникационной сети по некоторой топологии, распределенная память.

Программирование: обменПрограммирование: обмен сообщениями, отсутствие единого адресного пространства, PVM Message Passing InterfacePVM, Message Passing Interface.Необходимость выделения массового параллелизма, явного распределения данных и согласования параллелизма с распределением.

Суперкомпьютер Cray T3D,307 Гф

5 сентябряМосква, 2019 Суперкомпьютеры и параллельная обработка данных 12 из 274

307 Гфлопс

Page 13: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Поколения архитектур и парадигмы программированияСередина 90-х годов.Параллельные компьютеры с общей памятью

Особенности архитектуры: сотни процессоров объединяются надпроцессоров объединяются над общей памятью.

Программирование: единое адресноеПрограммирование: единое адресное пространство, локальные и глобальные переменные, OpenMP.

Dec AlphaServer

5 сентябряМосква, 2019 Суперкомпьютеры и параллельная обработка данных 13 из 274

Page 14: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Поколения архитектур и парадигмы программированияНачало 2000-x.Кластеры из узлов с общей памятьюОсобенности архитектуры: большое число

бмногопроцессорных узлов объединяются вместе с помощью коммуникационной сети по некоторой топологии, распределенная память; в рамках каждого узла несколькопамять; в рамках каждого узла несколько (многоядерных) процессоров объединяются над общей памятью.

Программирование: неоднородная схема MPI+OpenMP; необходимость выделения массового параллелизма явноемассового параллелизма, явное распределение данных, обмен сообщениями на внешнем уровне; распараллеливание в едином адресном

СКИФ МГУ «Чебышев»,60 Тфлопсраспараллеливание в едином адресном

пространстве, локальные и глобальные переменные на уровне узла с общей памятью.

60 Тфлопс

5 сентябряМосква, 2019 Суперкомпьютеры и параллельная обработка данных 14 из 274

Page 15: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Поколения архитектур и парадигмы программированияСередина 2000-x.Кластеры из узлов с общей памятью и ускорителямиО б бОсобенности архитектуры: большое число многопроцессорных узлов объединяются вместе с помощью коммуникационной сети по некоторой топологиисети по некоторой топологии, распределенная память; в рамках каждого узла несколько (многоядерных) процессоров объединяютсяпроцессоров объединяются над общей памятью; на каждом узле несколько ускорителей (GPU, PHI).

Программирование: MPI+OpenMP+CUDA/OpenCL МГУ «Ломоносов», 1.7 Пфлопс

5 сентябряМосква, 2019 Суперкомпьютеры и параллельная обработка данных 15 из 274

Page 16: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Поколения архитектур и парадигмы программированияС 1976 года до наших дней:

70-е – Векторизация циклов 80-е – Распараллеливание циклов (внешних) + Векторизация р ( ) р

(внутренних) 90-е – MPI середина 90-х – OpenMP середина 90 х OpenMP середина 2000-х – MPI+OpenMP 2010-е – CUDA, OpenCL, MPI+OpenMP + ускорители (GPU, Xeon Phi) ...

5 сентябряМосква, 2019 Суперкомпьютеры и параллельная обработка данных 16 из 274

Page 17: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

50 самых мощных компьютеров СНГ(top50 supercomputers ru)(top50.supercomputers.ru)

5 сентябряМосква, 2019 Суперкомпьютеры и параллельная обработка данных 17 из 274

Page 18: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Применение суперкомпьютеров 

Сокращение времени решения вычислительно сложных задачд

Сокращение времени обработки больших объемов данных

Решение задач реального времени Создание систем высокой надежности

5 сентябряМосква, 2019 Суперкомпьютеры и параллельная обработка данных 18 из 274

Page 19: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Суперкомпьютеры... Зачем?Суперкомпьютеры... Зачем?

Неужели есть настолько сложные задачи, что для их решения хорошего сервера не хватает? р р р р

Неужели есть настолько важные задачи, которые оправдывают крайне высокую стоимость суперкомпьютеров?

5 сентябряМосква, 2019 Суперкомпьютеры и параллельная обработка данных 19 из 274

Page 20: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

А далеко ли вычислительно сложные задачи?А далеко ли вычислительно сложные задачи?

count = 0;Задача о числе счастливых билетиков :

for ( i1 = 0; i1 < 10; ++i1)for ( i2 = 0; i2 < 10; ++i2)for ( i3 0 i3 < 10 ++i3)for ( i3 = 0; i3 < 10; ++i3)for ( i4 = 0; i4 < 10; ++i4)for ( i5 = 0; i5 < 10; ++i5)Intel Core Duo 2 6 ГГц: for ( i5 = 0; i5 < 10; ++i5)for ( i6 = 0; i6 < 10; ++i6) {

if( i1+i2+i3 == i4+i5+i6 )

Intel Core Duo 2.6 ГГц:8 цифр – 0.1 с

10 цифр – 10 с12 ф 1780

( )count = count+1;

}

12 цифр – 1780 с

5 сентябряМосква, 2019 Суперкомпьютеры и параллельная обработка данных 20 из 274

Page 21: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

А далеко ли вычислительно сложные задачи?А далеко ли вычислительно сложные задачи?

count = 0;Задача о числе счастливых билетиков :

for ( i1 = 0; i1 < 10; ++i1)for ( i2 = 0; i2 < 10; ++i2)for ( i3 0 i3 < 10 ++i3)for ( i3 = 0; i3 < 10; ++i3)for ( i4 = 0; i4 < 10; ++i4)for ( i5 = 0; i5 < 10; ++i5)for ( i5 = 0; i5 < 10; ++i5)for ( i6 = 0; i6 < 10; ++i6) {

if( i1+i2+i3 == i4+i5+i6 )Поможет ли● Поможет ли ●( )count = count+1;

}

Поможет ли оптимизация программы?

● Поможет ли использованиесуперкомпьютера?

Вычислительная сложность – 10n операций !

5 сентябряМосква, 2019 Суперкомпьютеры и параллельная обработка данных 21 из 274

Page 22: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Сверхвысокая производительность ‐ зачем?

Моделирование нефтяных резервуаров: Нефтеносная область 100*100*100 точек Нефтеносная область – 100 100 100 точек в каждой точке вычисляется от 5 до 20 функций

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

200-1000 операций для вычисления каждой функции в каждой точкефункции в каждой точке

100-1000 шагов по времени

Итого: 106 (точек сетки) * 10 (функций) * * 500 (операций) * 500 (шагов) = = 2500 млрд. операций

5 сентябряМосква, 2019 Суперкомпьютеры и параллельная обработка данных 22 из 274

Page 23: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Сверхвысокая производительность ‐ зачем?

Courtesy of P.Ricoux, Total, France

Page 24: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

DreamWorks

Page 25: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

ШРЕК ТРЕТИЙ СуперкомпьютерныйШРЕК ТРЕТИЙ СуперкомпьютерныйШРЕК ТРЕТИЙ. Суперкомпьютерный…ШРЕК ТРЕТИЙ. Суперкомпьютерный…

• 24 кадра в секунду• более 120 000 кадров в фильме• обработка кадров независимо друг от друга• кадр обрабатывается одним процессором• в среднем 2 часа на один вариант одного кадрав среднем 2 часа на один вариант одного кадра• всего: более 20 млн. процессорочасов• всего: более 30 Тбайт данных• всего: более 30 Тбайт данных• использованный суперкомпьютер: более 8000 процессорных ядерпроцессорных ядер

Page 26: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Рост производительности

7‐8 лет

12‐13 лет ПК60 Gflop/s

Mobile1 Gflop/s18‐20 лет

5 сентябряМосква, 2019 Суперкомпьютеры и параллельная обработка данных 26 из 274

Page 27: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Важные сокращенияМега (Mega) – 106 (миллион)Гига (Giga) – 109 (биллион / миллиард)Тера (Tera) 1012 (триллион)Тера (Tera) – 1012 (триллион)Пета (Peta) – 1015 (квадриллион)Экза (Exa) – 1018 (квинтиллион)Э за ( a) 0 ( ви иллио )

Флоп/с, Flop/s – Floating point operations per second

15 Tflop/s = 15 * 1012 арифметических операций15 Tflop/s = 15 1012 арифметических операций в секунду над вещественными данными, представленными в форме с плавающей точкой.р ф р щ

5 сентябряМосква, 2019 Суперкомпьютеры и параллельная обработка данных 27 из 274

Page 28: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Важные сокращенияМега (Mega) – 106 (миллион)Гига (Giga) – 109 (биллион / миллиард)Тера (Tera) 1012 (триллион)Тера (Tera) – 1012 (триллион)Пета (Peta) – 1015 (квадриллион)Экза (Exa) – 1018 (квинтиллион)Э за ( a) 0 ( ви иллио )

Флоп/с, Flop/s – Floating point operations per second

15 Tflop/s = 15 * 1012 арифметических операций15 Tflop/s = 15 1012 арифметических операций в секунду над вещественными данными, представленными в форме с плавающей точкой.р ф р щ

5 сентябряМосква, 2019 Суперкомпьютеры и параллельная обработка данных 28 из 274

Page 29: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Годы, флопсы и степень параллелизма(когда и как был достигнут очередной 'X'flops)(когда и как был достигнут очередной  X flops)

Mflops 1964 г. CDC 6600 10 MHz 1 CPUs106 pGflops 1985 г. Cray 2 125 MHz 8 CPUsTflops 1997 г. ASCI Red 200 MHz 9152 CPUs

109

1012 pPflops 2008 г. Roadrunner 3,2 GHz 122400 CoresEflops 2020 г. 108 – 109

1015

1018 Eflops 2020 г. 10 10

5 сентябряМосква, 2019 Суперкомпьютеры и параллельная обработка данных 29 из 274

Page 30: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Увеличение производительности компьютеров:за счет чего?за счет чего?

EDSAC, 1949 год Cray Titan, 2012EDSAC, 1949 год Cray Titan, 2012 год

изменениеизменениетакт: 2*10 –6 с 4.4*103 4.5*10 –10 с (2.2 GHz)

произв.: 102 оп/с 1.7*1014 1.7*1016 оп/c

Время такта = 1/(тактовая частота)

5 сентябряМосква, 2019 Суперкомпьютеры и параллельная обработка данных 30 из 274

Page 31: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Увеличение производительности компьютеров:за счет чего?за счет чего?

EDSAC, 1949 год Cray Titan, 2012 дгод

изменениетакт: 2*10 –6 с 4.4*103 4.5*10 –10 с (2.2 GHz)

произв.: 102 оп/с 1.7*1014 1.7*1016 оп/cр

Два вывода.Два вывода.1 Б б й б б1 Б б й б б1. Безусловно, без развития элементной базы не было 1. Безусловно, без развития элементной базы не было бы такого прогресса в развитии компьютеров.бы такого прогресса в развитии компьютеров.2 Но основной вклад в увеличении2 Но основной вклад в увеличении2. Но основной вклад в увеличении 2. Но основной вклад в увеличении производительности компьютеров производительности компьютеров –– это развитие это развитие архитектуры, и прежде всего, за счет глубокого архитектуры, и прежде всего, за счет глубокого р ур р ур ур р увнедрения идей параллелизмавнедрения идей параллелизма

5 сентябряМосква, 2019 Суперкомпьютеры и параллельная обработка данных 31 из 274

Page 32: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Тенденции развития современных процессоров

В течение нескольких десятилетий развитие ЭВМ сопровождалось удвоением их быстродействия каждые 1.5-2 года. Это обеспечивалось и

йповышением тактовой частоты и совершенствованием архитектуры (параллельное и конвейерное выполнение команд). Узким местом стала оперативная память. Знаменитый закон Мура, так хорошо работающий для процессоров, совершенно не применим для памяти, где скорости доступа удваиваются в лучшем случае каждые 5-6 лет. Совершенствовались системы кэш-памяти, увеличивался объем, усложнялись алгоритмы ее использования. Для процессора Intel Itanium:Для процессора Intel Itanium:Latency to L1: 1-2 cyclesLatency to L2: 5 - 7 cyclesLatency to L3: 12 - 21 cyclesLatency to memory: 180 – 225 cyclesВажным параметром становится - GUPS (Giga Updates Per Second)

5 сентябряМосква, 2019 Суперкомпьютеры и параллельная обработка данных 32 из 274

Важным параметром становится GUPS (Giga Updates Per Second)

Page 33: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Тенденции развития современных процессоров

Поток или нить (по-английски “thread”) – это легковесный процесс,

В П В ПВ ППоток

увеличили производительность процессора в 2 раза

р ц ,имеющий с другими

потоками общие ресурсы, включая общую

оперативную память.

Время

В П В ПВ ППотокоперативную память.

В П В ПВ П

В П В ПВ П

Поток 3

Поток 4

В П В ПВ П

В П В ПВ П

Поток 2

Поток 3Chip

MultiThreading

Время

В П В ПВ ППоток 1

В П5 сентябряМосква, 2019 Суперкомпьютеры и параллельная обработка данных 33 из 274

ВремяВ - вычисления П - доступ к памяти

Page 34: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Cуперкомпьютерные системы (Top500)

5 сентябряМосква, 2019 Суперкомпьютеры и параллельная обработка данных 34 из 274

Page 35: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Cуперкомпьютерные системы (Top500)

№ 20 в Top 500Суперкомпьютер K computer, SPARC64 VIIIfx 2.0GHz, Tofu Су ер о ю ер co pute , S C6 0G , o u

interconnect Пиковая производительность - 11280 TFlop/s Число ядер в системе — 705 024 Производительность на Linpack - 10510 TFlop/s (93.17 % от пиковой) Энергопотребление комплекса - 12659 89 кВт Энергопотребление комплекса - 12659.89 кВт

5 сентябряМосква, 2019 Суперкомпьютеры и параллельная обработка данных 35 из 274

Page 36: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Cуперкомпьютерные системы (Top500)

№ 3 в Top 500

Суперкомпьютер Sunway TaihuLight, Sunway MPP, SW26010 260C1.45GHz, Custom interconnect

/ Пиковая производительность – 125435.9 TFlop/s Число ядер в системе — 10 649 600 Производительность на Linpack – 93014 5 TFlop/s (74 15 % от пиковой) Производительность на Linpack – 93014.5 TFlop/s (74.15 % от пиковой) Энергопотребление комплекса - 15371.0 кВт

Важным параметром становится – Power Efficency (Megaflops/watt)

Как добиться максимальной производительности на Ватт => Chip MultiProcessing, многоядерность.

5 сентябряМосква, 2019 Суперкомпьютеры и параллельная обработка данных 36 из 274

Page 37: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Тенденции развития современных процессоров

ShenWei SW2601064-разрядный RISC-процессор с поддержкойSIMD инструкций и внеочереднымSIMD-инструкций и внеочереднымисполнением команд

Изготовлен по схеме, предусматривающейиспользование четырех кластеров с 64вычислительными ядрами (CPE) и одним

(MPE)управляющим ядром (MPE) в каждом.

В каждом кластере также имеется собственный рконтроллер памяти, суммарная пропускная способность на один процессорный разъем достигает 136,5 ГБ/с.

На каждое ядро выделено 12 КБ кэш-памяти инструкций и 64 КБ кэш-памяти данных.

5 сентябряМосква, 2019 Суперкомпьютеры и параллельная обработка данных 37 из 274

инструкций и 64 КБ кэш памяти данных. Рабочая частота процессора - 1,45 ГГц.

Page 38: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Тенденции развития современных процессоров

AMD Opteron серии 6300 6380 SE 16 ядер @ 2 5 ГГц 16 МБ6380 SE 16 ядер @ 2,5 ГГц, 16 МБ

L3 Cache6348 12 ядер @ 2,8 ГГц, 16 МБ L3

Cache6328 8 ядер @ 3,2 ГГц, 16 МБ L3

CacheCache6308 4 ядра @ 3,5 ГГц, 16 МБ L3

CacheAMD T b COREтехнология AMD Turbo CORE

встроенный контроллер памяти (4 канала памяти DDR3))

4 канала «точка-точка» с использованием HyperTransort 3.0

5 сентябряМосква, 2019 Суперкомпьютеры и параллельная обработка данных 38 из 274

Page 39: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

AMD EPYC 7000 Series Processors

5 сентябряМосква, 2019 Суперкомпьютеры и параллельная обработка данных 39 из 274

Page 40: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Тенденции развития современных процессоров

Intel Xeon Processor серии E5E5-2699 v4 (55M Cache, 2.20 GHz) 22 ядра, 44 нитиE5 2698 4 (50M C h 2 20 GH ) 20 40 йE5-2698 v4 (50M Cache, 2.20 GHz) 20 ядер, 40 нитейE5-2697 v4 (45M Cache, 2.30 GHz) 18 ядер, 36 нитейE5 2697A v4 (40M Cache 2 60 GHz) 16 ядер 32 нитиE5-2697A v4 (40M Cache, 2.60 GHz) 16 ядер, 32 нитиE5-2667 v4 (25M Cache, 3.20 GHz) 8 ядер, 16 нитей

Intel® Turbo BoostIntel® Hyper-ThreadingIntel® Intelligent PowerIntel® QuickPath

5 сентябряМосква, 2019 Суперкомпьютеры и параллельная обработка данных 40 из 274

Page 41: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

2nd Generation Intel Xeon Scalable ProcessorsПроцессор 6246 8260 8276

Дата выпуска Q2'19 Q2'19 Q2'19

Литография 14 nm 14 nm 14 nmЛитография 14 nm 14 nm 14 nm

Рекомендуемая цена $3286.00 $4702.00 $8719.00

Производительность

Количество ядер 12 24 28

Количество потоков 24 48 56

Б 3 30 GH 2 40 GH 2 20 GHБазовая тактовая частота процессора 3,30 GHz 2,40 GHz 2,20 GHz

Максимальная тактовая частота с технологией Turbo Boost 4,20 GHz 3,90 GHz 4,00 GHz

Кэш-память 25 MB 36 MB 39 MB

Расчетная мощность 165 W 165 W 165 W

5 сентябряМосква, 2019 Суперкомпьютеры и параллельная обработка данных 41 из 274

Page 42: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Тенденции развития современных процессоров

Intel Core i7 High End Desktop Processors

i7-6950X Extreme Edition (25M Cache, up to 3.50 GHz), 10 ядер, 20 нитей

i7-6900K Processor (20M Cache, up to 3.70 GHz), 8 ядер, 16 нитей

i7-6850K Processor (15M Cache, up to 3.80 GHz), 6 12 й6 ядер, 12 нитей

5 сентябряМосква, 2019 Суперкомпьютеры и параллельная обработка данных 42 из 274

Page 43: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Тенденции развития современных процессоров

IBM Power8 2 75 – 4 2 ГГц 2,75 – 4,2 ГГц 12 ядер x 8 нитей

Simultaneuos MultiThreading

64 КБ Data Cache + 32КБ instruction Cache32КБ instruction Cache

L2 512 КБ L3 96 МБ

www.idh.ch/IBM TU 2013/Power8.pdf

5 сентябряМосква, 2019 Суперкомпьютеры и параллельная обработка данных 43 из 274

www.idh.ch/IBM_TU_2013/Power8.pdf

Page 44: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Тенденции развития современных процессоров

IBM Power9 2 75 – 4 2 ГГц 2,75 – 4,2 ГГц 12 ядер x 8 нитей

24 ядра x 4 нити L2 512 КБ L3 120 МБ (10 МБ на 2

ядра)ядра)

5 сентябряМосква, 2019 Суперкомпьютеры и параллельная обработка данных 44 из 274

Page 45: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Тенденции развития современных процессоров

Intel Itanium серии 9500Intel Itanium серии 95009560 8 ядер @ 2,53 ГГц, 16 нитей, 32 МБ L3 Cache9550 4 ядра @ 2,40 ГГц, 8 нитей, 32 МБ L3 Cache

5 сентябряМосква, 2019 Суперкомпьютеры и параллельная обработка данных 45 из 274

Page 46: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Отечественный процессор «Эльбрус‐8C»Количество ядер 8

Кэш-память 2го уровня 8 * 512 КБ

Кэш-память 3го уровня 16 МБ

Рабочая частота 1.3 ГГц

Производительность ~250 ГФлопсПроизводительность ~250 ГФлопс

Тип контроллеров памяти DDR3-1600

Кол-во контроллеров памяти 4

Поддержка многопроцессорных систем До 4 процессоровсистем

Каналы межпроцессорного обмена (пропускная способность) 3 (16 ГБ/с)

Технологический процесс 28 нм

Площадь кристалла 350 кв. мм

5 сентябряМосква, 2019 Суперкомпьютеры и параллельная обработка данных 46 из 274

Рассеиваемая мощность на уровне 60 – 90 Вт

Page 47: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Отечественный процессор «Эльбрус‐8C»

5 сентябряМосква, 2019 Суперкомпьютеры и параллельная обработка данных 47 из 274

Page 48: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Суперкомпьютерные системы (Top500)

5 сентябряМосква, 2019 Суперкомпьютеры и параллельная обработка данных 48 из 274

Page 49: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Суперкомпьютерные системы (Top500)

5 сентябряМосква, 2019 Суперкомпьютеры и параллельная обработка данных 49 из 274

Page 50: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Intel Xeon Phi Coprocessor / Processor

5 сентябряМосква, 2019 Суперкомпьютеры и параллельная обработка данных 50 из 274

Page 51: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Pezy‐SC Many Core ProcessorL iLogic Cores(PE) 1,024

Core Frequency 733MHzCore Frequency 733MHz

Peak Performance

Floating Point Single 3.0TFlops / Double 1.5TFlopsp

Host Interface

PCI Express GEN3.0 x 8Lane x 4Port (x16 bifurcation available)JESD204B Protocol supportJESD204B Protocol support

DRAM Interface

DDR4, DDR3 combo 64bit x 8Port Max B/W 1533.6GB/sDRAM Interface +Ultra WIDE IO SDRAM (2,048bit) x 2Port Max B/W 102.4GB/s

Control CPU ARM926 2coreControl CPU ARM926 2core

Process Node 28nm

FCBGA 47 5mm x 47 5mm Ball Pitch

5 сентябряМосква, 2019 Суперкомпьютеры и параллельная обработка данных 51 из 274

Package FCBGA 47.5mm x 47.5mm, Ball Pitch 1mm, 2,112pin

Page 52: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Pezy‐SC2 Many Core Processor

Logic Cores(PE) 2,048

Core Frequency 1 000MHzCore Frequency 1,000MHz

Peak Performance

Half precision 16.2TFlops / Floating Point Single 8.2TFlops / Double 4 1TFlops4.1TFlops

Host Interface PCIe Gen3/4 x16 * 2CH ( x8 * 4CH )

DRAM Interface DDR4 64bit ( ECC ) * 4CH / 3,200MbpsBW 100GB/DRAM Interface BW=100GB/sec

CPUMIPS64R6 ( P6600 ) L1 I:64KB+D:64KB ( each core )CPU L1 I:64KB+D:64KB ( each core ) L2 2MB

Process Node 16 nm FinFET

5 сентябряМосква, 2019 Суперкомпьютеры и параллельная обработка данных 52 из 274

Power 130 W

Page 53: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Тенденции развития современных вычислительных систем

Темпы уменьшения латентности памяти гораздо ниже темпов ускорения процессоров + прогресс в технологии изготовления кристаллов => CMT (Chip MultiThreading)

Опережающий рост потребления энергии при росте тактовой частоты Опережающий рост потребления энергии при росте тактовой частоты + прогресс в технологии изготовления кристаллов => CMP (Chip MultiProcessing, многоядерность)

И б б б И то и другое требует более глубокого распараллеливания для эффективного использования аппаратуры

5 сентябряМосква, 2019 Суперкомпьютеры и параллельная обработка данных 53 из 274

Page 54: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Существующие подходы для создания параллельных программ для современных процессоров/системпрограмм для современных процессоров/систем Автоматическое / автоматизированное распараллеливание Библиотеки нитей Библиотеки нитей

Win32 APIPOSIX

Библиотеки передачи сообщенийMPI SHMEM

OpenMP CUDA CUDA OpenACC DVMH

5 сентябряМосква, 2019 Суперкомпьютеры и параллельная обработка данных 54 из 274

Page 55: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Вычисление числа

4.01

4.0(1+x2) dx =

0

4.0

Мы можем аппроксимировать интеграл

N

как сумму прямоугольников:2.0

F(xi)x i = 0

Где каждый прямоугольникГде каждый прямоугольник имеет ширину x и высоту F(xi) в середине интервала

1.0X0.0

5 сентябряМосква, 2019 Суперкомпьютеры и параллельная обработка данных 55 из 274

F(xi) в середине интервалаX

Page 56: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Вычисление числа  . Последовательная программа

#include <stdio.h>int main (){

int n =100000, i;double pi, h, sum, x;double pi, h, sum, x;h = 1.0 / (double) n;sum = 0.0;for (i = 1; i <= n; i ++){

x = h * ((double)i - 0.5);x h ((double)i 0.5);sum += (4.0 / (1.0 + x*x));

}i h *pi = h * sum;

printf("pi is approximately %.16f”, pi);return 0;

5 сентябряМосква, 2019 Суперкомпьютеры и параллельная обработка данных 56 из 274

;}

Page 57: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Автоматическое распараллеливание

Polaris, CAPO, WPP, SUIF, VAST/Parallel, OSCAR, Intel/OpenMP, ParaWise

icc -parallel pi.cpi.c(8): (col. 5) remark: LOOP WAS AUTO-PARALLELIZED.pi c(8): (col 5) remark: LOOP WAS VECTORIZEDpi.c(8): (col. 5) remark: LOOP WAS VECTORIZED.pi.c(8): (col. 5) remark: LOOP WAS VECTORIZED.

В общем случае, автоматическое распараллеливание затруднено: косвенная индексация (A[B[i]]); указатели (ассоциация по памяти); указатели (ассоциация по памяти); сложный межпроцедурный анализ.

5 сентябряМосква, 2019 Суперкомпьютеры и параллельная обработка данных 57 из 274

Page 58: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Автоматизированное распараллеливание

Intel/GAP (Guided Auto-Parallel), CAPTools/ParaWise, BERT77 FORGE Magic/DM ДВОР (ДиалоговыйBERT77, FORGE Magic/DM, ДВОР (Диалоговый Высокоуровневый Оптимизирующий Распараллеливатель), САПФОР (Система Автоматизации Параллелизации ФОРтран программ)

for (i=0; i<n; i++) {for (i=0; i<n; i++) {if (A[i] > 0) {b=A[i]; A[i] = 1 / A[i]; }if (A[i] > 1) {A[i] += b;}

}

icc -guide -parallel test cppicc guide parallel test.cpp

5 сентябряМосква, 2019 Суперкомпьютеры и параллельная обработка данных 58 из 274

Page 59: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Автоматизированное распараллеливание

test.cpp(49): remark #30521: (PAR) Loop at line 49 cannot be parallelized due to conditional assignment(s) into the following variable(s): b. This loopdue to conditional assignment(s) into the following variable(s): b. This loop will be parallelized if the variable(s) become unconditionally initialized at the top of every iteration. [VERIFY] Make sure that the value(s) of the variable(s) read in any iteration of the loop must have been written earlier ( ) y pin the same iteration.

test.cpp(49): remark #30525: (PAR) If the trip count of the loop at line 49 is greater than 188, then use "#pragma loop count min(188)" to parallelizegreater than 188, then use #pragma loop count min(188) to parallelize this loop. [VERIFY] Make sure that the loop has a minimum of 188 iterations.

#pragma loop count min (188)#pragma loop count min (188)for (i=0; i<n; i++) {

b = A[i];if (A[i] > 0) {A[i] = 1 / A[i];}if (A[i] > 1) {A[i] += b;}

}

5 сентябряМосква, 2019 Суперкомпьютеры и параллельная обработка данных 59 из 274

}

Page 60: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Вычисление числа  с использованием Win32 API

#include <stdio.h>#include <windows.h>#define NUM_THREADS 2CRITICAL_SECTION hCriticalSection;double pi = 0.0;int n =100000;void main (){

int i, threadArg[NUM_THREADS];DWORD threadID;HANDLE threadHandles[NUM_THREADS];for(i=0; i<NUM_THREADS; i++) threadArg[i] = i+1;InitializeCriticalSection(&hCriticalSection);for (i=0; i<NUM THREADS; i++) threadHandles[i] = ( ; _ ; ) [ ]

CreateThread(0,0,(LPTHREAD_START_ROUTINE) Pi,&threadArg[i], 0, &threadID);WaitForMultipleObjects(NUM_THREADS, threadHandles, TRUE,INFINITE);printf("pi is approximately %.16f”, pi);

5 сентябряМосква, 2019 Суперкомпьютеры и параллельная обработка данных 60 из 274

printf( pi is approximately %.16f , pi);}

Page 61: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Вычисление числа  с использованием Win32 API

void Pi (void *arg){{

int i, start;double h, sum, x;h = 1 0 / (double) n;h = 1.0 / (double) n;sum = 0.0;start = *(int *) arg;for (i=start; i<= n; i=i+NUM THREADS)for (i=start; i<= n; i=i+NUM_THREADS){

x = h * ((double)i - 0.5);sum += (4 0 / (1 0 + x*x));sum += (4.0 / (1.0 + x*x));

}EnterCriticalSection(&hCriticalSection);

i h *pi += h * sum;LeaveCriticalSection(&hCriticalSection);

}

5 сентябряМосква, 2019 Суперкомпьютеры и параллельная обработка данных 61 из 274

Page 62: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Взаимное исключение критических интервалов

При взаимодействии через общую память нити должны синхронизовать свое выполнение.

Thread0: pi = pi + val; && Thread1: pi = pi + val;

Время Thread 0 Thread 11 LOAD R1,pi2 LOAD R2,val3 ADD R1,R2 LOAD R3,pi4 STORE R1 pi LOAD R4 val4 STORE R1,pi LOAD R4,val5 ADD R3,R46 STORE R3,pi,p

Результат зависит от порядка выполнения команд. Требуется взаимное

5 сентябряМосква, 2019 Суперкомпьютеры и параллельная обработка данных 62 из 274

исключение критических интервалов.

Page 63: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Вычисление числа  с использованием OpenMP

#include <stdio.h>int main (){

int n =100000, i;double pi, h, sum, x;double pi, h, sum, x;h = 1.0 / (double) n;sum = 0.0;

#pragma omp parallel for reduction(+:sum) private(x)for (i = 1; i <= n; i ++){{

x = h * ((double)i - 0.5);sum += (4.0 / (1.0 + x*x));

}}pi = h * sum;printf("pi is approximately %.16f”, pi);

5 сентябряМосква, 2019 Суперкомпьютеры и параллельная обработка данных 63 из 274

p ( p pp y , p );return 0;

}

Page 64: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Вычисление числа  с использованием MPI

#include "mpi.h"#include <stdio h>#include <stdio.h>int main (int argc, char *argv[]){

int n =100000, myid, numprocs, i;double mypi, pi, h, sum, x;MPI Init(&argc &argv);MPI_Init(&argc,&argv);MPI_Comm_size(MPI_COMM_WORLD,&numprocs);MPI_Comm_rank(MPI_COMM_WORLD,&myid);h = 1.0 / (double) n;sum = 0.0;

5 сентябряМосква, 2019 Суперкомпьютеры и параллельная обработка данных 64 из 274

Page 65: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Вычисление числа  с использованием MPI

for (i = myid + 1; i <= n; i += numprocs){{

x = h * ((double)i - 0.5);sum += (4.0 / (1.0 + x*x));

}mypi = h * sum;MPI Reduce(&mypi &pi 1 MPI DOUBLE MPI SUM 0 MPI COMM WORLD);MPI_Reduce(&mypi, &pi, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD);if (myid == 0) printf("pi is approximately %.16f”, pi);MPI_Finalize();return 0;

}

5 сентябряМосква, 2019 Суперкомпьютеры и параллельная обработка данных 65 из 274

Page 66: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Вычисление числа  с использованием SHMEM

#include <shmem.h>#include <stdio h>#include <stdio.h>long sync [SHMEM_REDUCE_SYNC_SIZE] = {SHMEM_SYNC_VALUE};double work [SHMEM_REDUCE_MIN_WRKDATA_SIZE];double pi;int main (int argc, char *argv[]){{

int n =100000, myid, numprocs, i;double h, sum, x;shmem_init();numprocs = shmem_n_pes();myid = shmem my pe();myid shmem_my_pe();h = 1.0 / (double) n;sum = 0.0;

5 сентябряМосква, 2019 Суперкомпьютеры и параллельная обработка данных 66 из 274

Page 67: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Вычисление числа  с использованием SHMEM

for (i = myid + 1; i <= n; i += numprocs){{

x = h * ((double)i - 0.5);sum += (4.0 / (1.0 + x*x));

}pi = h * sum;shmem double sum to all(&pi &pi 1 0 0 numprocs work sync);shmem_double_sum_to_all(&pi, &pi, 1, 0, 0, numprocs, work, sync);if (myid == 0) printf("pi is approximately %.16f”, pi);shmem_finalize();return 0;

}

5 сентябряМосква, 2019 Суперкомпьютеры и параллельная обработка данных 67 из 274

Page 68: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Вычисление числа  с использованием  UPC

#include <stdio.h>#include <upc.h>#include <upc collective h>#include <upc_collective.h>shared double pi;shared double sum[THREADS];int main (){

int n =100000, i;double h, x;h = 1.0 / (double) n;sum[MYTHREAD] = 0.0;

upc_all_reduceI (&pi, sum, UPC_ADD, THREADS, 1,NULL, UPC IN ALLSYNC | UPC OUT ALLSYNC);[ ] ;

for (i=1+MYTHREAD; i<=n;i+= THREADS){

x = h * ((double)i - 0 5);

UPC_IN_ALLSYNC | UPC_OUT_ALLSYNC);if (MYTHREAD == 0) {

pi *= h;x = h ((double)i - 0.5);sum[MYTHREAD] += (4.0 / (1.0 + x*x));

}

pi *= h; printf("pi is approximately %.16f", pi);

}

5 сентябряМосква, 2019 Суперкомпьютеры и параллельная обработка данных 68 из 274

return 0;}

Page 69: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

CPU или GPU

5 сентябряМосква, 2019 Суперкомпьютеры и параллельная обработка данных 69 из 274

Page 70: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

#include <stdio h>Вычисление числа  с использованием CUDA#include <stdio.h>#include <cuda.h>#define N 1000000#define NUM_BLOCK 32 // Number of thread blocks#define NUM_THREAD 32 // Number of threads per blockint tid;int tid;float pi = 0;// Kernel that executes on the CUDA device__global__ void cal_pi(float *sum) {

int i;float x, step=1.0/N; // Step sizefloat x, step 1.0/N; // Step size// Sequential thread index across the blocks int idx = blockIdx.x*blockDim.x+threadIdx.x; f (i id i N i NUM BLOCK*NUM THREAD) {for (i=idx; i< N; i+=NUM_BLOCK*NUM_THREAD) {

x = (i+0.5)*step;sum[idx] += 4.0/(1.0+x*x);[ ] ( );

}}

http://cacs.usc.edu/education/cs596/src/cuda/pi.cu

70 из 274Суперкомпьютеры и параллельная обработка данных5 сентябряМосква, 2019

Page 71: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Вычисление числа  с использованием CUDAint main(void) { // Main routine that executes on the host

dim3 dimGrid(NUM_BLOCK,1,1); // Grid dimensionsdim3 dimBlock(NUM_THREAD,1,1); // Block dimensionsfloat *sumHost, *sumDev; // Pointer to host & device arrayssize_t size = NUM_BLOCK*NUM_THREAD*sizeof(float); //Array sizesumHost = (float *)malloc(size); // Allocate array on host( ) ( ); ycudaMalloc((void **) &sumDev, size); // Allocate array on devicecudaMemset(sumDev, 0, size); // Initialize array in device to 0// Do calculation on device// Do calculation on devicecal_pi <<<dimGrid, dimBlock>>> (sumDev); // call CUDA kernel// Retrieve result from device and store it in host array

d M ( H t D i d M D i T H t)cudaMemcpy(sumHost, sumDev, size, cudaMemcpyDeviceToHost);for(tid=0; tid<NUM_THREAD*NUM_BLOCK; tid++) pi += sumHost[tid];pi *= step;printf("PI = %f\n",pi); // Print resultsfree(sumHost); // CleanupcudaFree(sumDev);return 0;

}http://cacs.usc.edu/education/cs596/src/cuda/pi.cu

71 из 2745 сентябряМосква, 2019 Суперкомпьютеры и параллельная обработка данных

Page 72: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Вычисление числа  с использованием OpenACC

#include <stdio.h>int main () pgcc ‐acc test.c ‐Minfo=all

i{int n =100000, i;double pi, h, sum, x;

main:8, Accelerator kernel generatedGenerating Tesla code9  #pragma acc loop gang  vector(128) /* blockIdx xdouble pi, h, sum, x;

h = 1.0 / (double) n;sum = 0.0;

9, #pragma acc loop gang, vector(128) /* blockIdx.xthreadIdx.x */

12, Sum reduction generated for sum

#pragma acc parallel loopfor (i = 1; i <= n; i ++){{

x = h * ((double)i - 0.5);sum += (4.0 / (1.0 + x*x));

}}pi = h * sum;printf("pi is approximately %.16f", pi);

5 сентябряМосква, 2019 Суперкомпьютеры и параллельная обработка данных 72 из 274

p ( p pp y , p );return 0;

}

Page 73: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Вычисление числа  с использованием DVM#include <stdio.h>int main (){{

int n =100000, i;double pi, h, s, x;

#pragma dvm template[n] distribute[block]#pragma dvm template[n] distribute[block]void *tmp;h = 1.0 / (double) n;

0 0s = 0.0;#pragma dvm parallel (i on tmp[i]) reduction(sum(s)) private(x)

for (i = 1; i <= n; i ++){

x = h * ((double)i - 0.5);s += (4.0 / (1.0 + x*x));

}pi = h * s;printf("pi is approximately %.16f”, pi);

5 сентябряМосква, 2019 Суперкомпьютеры и параллельная обработка данных 73 из 274

p t ( p s app o ate y % 6 , p );return 0;

}

Page 74: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Вычисление числа  с использованием OpenMP

#include <stdio.h>int main (){

int n =100000, i;double pi, h, sum, x;double pi, h, sum, x;h = 1.0 / (double) n;sum = 0.0;

#pragma omp parallel for reduction(+:sum) private(x)for (i = 1; i <= n; i ++){{

x = h * ((double)i - 0.5);sum += (4.0 / (1.0 + x*x));

}}pi = h * sum;printf("pi is approximately %.16f”, pi);

5 сентябряМосква, 2019 Суперкомпьютеры и параллельная обработка данных 74 из 274

p ( p pp y , p );return 0;

}

Page 75: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Нити или процессыfork() pthread create()Platform fork() pthread_create()

real user sys real user sysIntel 2.6 GHz Xeon E5-2670 (16 cores/node)

8.1 0.1 2.9 0.9 0.2 0.3

Intel 2.8 GHz Xeon 5660 (12 cores/node)

4.4 0.4 4.3 0.7 0.2 0.5

AMD 2.3 GHz Opteron (16 12.5 1.0 12.5 1.2 0.2 1.3AMD 2.3 GHz Opteron (16 cores/node)

12.5 1.0 12.5 1.2 0.2 1.3

AMD 2.4 GHz Opteron (8 cores/node)

17.6 2.2 15.7 1.4 0.3 1.3

IBM 4.0 GHz POWER6 (8 cpus/node)

9.5 0.6 8.8 1.6 0.1 0.4

IBM 1.9 GHz POWER5 p5-575 (8 cpus/node)

64.2 30.7 27.6 1.7 0.6 1.1575 (8 cpus/node)

IBM 1.5 GHz POWER4 (8 cpus/node)

104.5 48.6 47.2 2.1 1.0 1.5

INTEL 2 4 GHz Xeon (2 54 9 1 5 20 8 1 6 0 7 0 9INTEL 2.4 GHz Xeon (2 cpus/node)

54.9 1.5 20.8 1.6 0.7 0.9

INTEL 1.4 GHz Itanium2 (4 cpus/node)

54.5 1.1 22.2 2.0 1.2 0.6

Суперкомпьютеры и параллельная обработка данных 75 из 2745 сентябряМосква, 2019

https://computing.llnl.gov/tutorials/pthreads/

Page 76: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Нити или процессы

Platform MPI Shared Memory Bandwidth(GB/sec)

Pthreads Worst CaseMemory-to-CPU Bandwidth(GB/sec) (GB/sec)

Intel 2.6 GHz Xeon E5-2670 4.5 51.2

Intel 2.8 GHz Xeon 5660 5.6 32

AMD 2.3 GHz Opteron 1.8 5.3

AMD 2.4 GHz Opteron 1.2 5.3

IBM 1.9 GHz POWER5 p5-575 4.1 16

IBM 1.5 GHz POWER4 2.1 4

Intel 2.4 GHz Xeon 0.3 4.3I t l 1 4 GH It i 2 1 8 6 4Intel 1.4 GHz Itanium 2 1.8 6.4

Суперкомпьютеры и параллельная обработка данных 76 из 2745 сентябряМосква, 2019

https://computing.llnl.gov/tutorials/pthreads/

Page 77: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Достоинства использования OpenMP вместо MPI для многоядерных процессоров Возможность инкрементального распараллеливания Упрощение программирования и эффективность на нерегулярных

многоядерных процессоров

У роще е ро ра ро а эффе ос а ере у рвычислениях, проводимых над общими данными

Ликвидация дублирования данных в памяти, свойственного MPI-программампрограммам

Объем памяти пропорционален быстродействию процессора. В последние годы увеличение производительности процессора достигается удвоением числа ядер, при этом частота каждого ядра снижается. Наблюдается тенденция к сокращению объема оперативной памяти, приходящейся на одно ядро. Присущая р , р д щ д др р ущOpenMP экономия памяти становится очень важна.

Наличие локальных и/или разделяемых ядрами КЭШей будут учитываться при оптимизации OpenMP программ компиляторамиучитываться при оптимизации OpenMP-программ компиляторами, что не могут делать компиляторы с последовательных языков для MPI-процессов.

Суперкомпьютеры и параллельная обработка данных 77 из 2745 сентябряМосква, 2019

Page 78: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Тесты NAS

BT 3D Навье-Стокс, метод переменных направлений

CG Оценка наибольшего собственного значения симметричной разреженной матрицы

EP Генерация пар случайных чисел ГауссаFT Быстрое преобразование Фурье, 3D спектральный р р р ур р

методIS Параллельная сортировкаLU 3D Навье Стокс метод верхней релаксацииLU 3D Навье-Стокс, метод верхней релаксацииMG 3D уравнение Пуассона, метод MultigridSP 3D Навье-Стокс Beam-Warning approximateSP 3D Навье-Стокс, Beam-Warning approximate

factorization

Суперкомпьютеры и параллельная обработка данных 78 из 2745 сентябряМосква, 2019

Page 79: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Тесты NAS

Analyzing the Effect of Different Programming Models Upon Performance and Memory Usage on Cray XT5 Platformshttps://www nersc gov/assets/NERSC-Staff-Publications/2010/Cug2010Shan pdf

Суперкомпьютеры и параллельная обработка данных 79 из 274

https://www.nersc.gov/assets/NERSC-Staff-Publications/2010/Cug2010Shan.pdf

5 сентябряМосква, 2019

Page 80: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Тесты NAS

Analyzing the Effect of Different Programming Models Upon Performance and Memory Usage on Cray XT5 Platformshttps://www nersc gov/assets/NERSC-Staff-Publications/2010/Cug2010Shan pdf

Суперкомпьютеры и параллельная обработка данных 80 из 274

https://www.nersc.gov/assets/NERSC-Staff-Publications/2010/Cug2010Shan.pdf

5 сентябряМосква, 2019

Page 81: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Содержание

Тенденции развития современных вычислительных систем OpenMP – модель параллелизма по управлению Конструкции распределения работы Конструкции для синхронизации нитей Система поддержки выполнения OpenMP-программ Новые возможности OpenMP

5 сентябряМосква, 2019 Технология параллельного программирования OpenMP 81 из 274

Page 82: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

История OpenMP

1998 2002 2005 2008 2011 2013 2015

OpenMPC/C++ 1.0

OpenMPC/C++ 2.0

F/C/C++ 4.5OpenMP

F/C/C++ 4.5

OpenMPF/C/C++ 2 5

OpenMPF/C/C++ 3 0

OpenMPF/C/C++ 3 1

OpenMPFortran 1.1

OpenMPFortran 1.0

F/C/C++ 2.5F/C/C++ 2.5 F/C/C++ 3.0F/C/C++ 3.0 F/C/C++ 3.1F/C/C++ 3.1

OpenMP

OpenMPFortran 2.0

19991997 F/C/C++ 4.0OpenMP

F/C/C++ 4.0

5 сентябряМосква, 2019 Технология параллельного программирования OpenMP 82 из 274

Page 83: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

OpenMP Architecture Review Board

AMD ARM

ANL ASC/LLNL ARM

Cray Fujitsu HP

ASC/LLNL cOMPunity EPCC LANL HP

IBM Intel

Mi

LANL LBNL NASA

ORNL Micron NEC NVIDIA

ORNL RWTH Aachen University Texas Advanced Computing

C t Oracle Corporation Red Hat Texas Instrument

Center SNL- Sandia National Lab BSC - Barcelona

S ti C tSupercomputing Center University of Houston

5 сентябряМосква, 2019 Технология параллельного программирования OpenMP 83 из 274

Page 84: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Cимметричные мультипроцессорные системы (SMP)

В б й й Все процессоры имеют доступ к любой точке памяти с одинаковой скоростью.

Процессоры подключены к памяти либо с помощью общей шины, р ц р д щ щ ,либо с помощью crossbar-коммутатора.

Аппаратно поддерживается когерентность кэшей.

5 сентябряМосква, 2019 Технология параллельного программирования OpenMP 84 из 274

Например, серверы HP 9000 V-Class, Convex SPP-1200,…

Page 85: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Системы с неоднородным доступом к памяти (NUMA)

Система состоит из однородных базовых модулейоднородных базовых модулей (плат), состоящих из небольшого числа процессоров и блока памятии блока памяти.

Модули объединены с помощью высокоскоростного коммутатора.

Поддерживается единое адресное пространствоадресное пространство.

Доступ к локальной памяти в несколько раз быстрее, чем к удаленной.

5 сентябряМосква, 2019 Технология параллельного программирования OpenMP 85 из 274

Page 86: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Системы с неоднородным доступом к памяти (NUMA)

SGI Altix UV (UltraVioloet) 2000( ) 256 Intel® Xeon® processor E5-4600

product family 2.4GHz-3.3GHz - 2048 Cores (4096 Threads)(4096 Threads)

64 TB памяти NUMAlink6 (NL6; 6 7GB/s bidirectional) NUMAlink6 (NL6; 6.7GB/s bidirectional)

http://www.sgi.com/products/servers/uv/p g p

5 сентябряМосква, 2019 Технология параллельного программирования OpenMP 86 из 274

Page 87: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Обзор основных возможностей OpenMP

#pragma omp criticalC$OMP FLUSH

$ (/ /)

OpenMP: API для написания многонитевых приложений

OpenMP: API для написания многонитевых приложений

C$OMP PARALLEL DO SHARED(A,B,C) CALL OMP_TEST_LOCK(LCK)

CALL OMP_SET_NUM_THREADS(10)C$OMP THREADPRIVATE(/ABC/) Множество директив компилятора, набор функции библиотеки системы поддержки переменные окружения

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

CALL OMP_INIT_LOCK (LCK)

SETENV OMP SCHEDULE “STATIC 4”C$OMP SINGLE PRIVATE(X)

C$OMP MASTERC$OMP ATOMICподдержки, переменные окружения Облегчает создание многонитиевых программ на Фортране, C и C++

поддержки, переменные окружения Облегчает создание многонитиевых программ на Фортране, C и C++

SETENV OMP_SCHEDULE “STATIC,4”

C$OMP ORDEREDC$OMP PARALLEL DO ORDERED PRIVATE (A, B, C) Обобщение опыта создания параллельных программ для SMP и DSM систем за последние 20 лет

Обобщение опыта создания параллельных программ для SMP и DSM систем за последние 20 лет

#pragma omp parallel for private(a, b)

C$OMP PARALLEL REDUCTION (+: A, B) C$OMP SECTIONS

C$OMP BARRIER

C$OMP DO LASTPRIVATE(XX)C$OMP PARALLEL COPYIN(/blk/)

th d OMP GET NUM PROCS()

$

5 сентябряМосква, 2019 Технология параллельного программирования OpenMP 87 из 274

omp_set_lock(lck)nthrds = OMP_GET_NUM_PROCS()

Page 88: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Директивы и клаузы

Спецификации параллелизма в OpenMP представляют собой директивы вида:

#pragma omp название-директивы[ клауза[ [,]клауза]...]

Например:Например:#pragma omp parallel default (none) shared (i,j)Исполняемые директивы:

b i barrier taskwait taskyieldy flush taskgroupО са е а ре аОписательная директива: threadprivate

5 сентябряМосква, 2019 Технология параллельного программирования OpenMP 88 из 274

Page 89: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Структурный блок

Действие остальных директив распространяется на структурный блок:#pragma omp название-директивы[ клауза[ [,]клауза]...]{структурный блок

}}Структурный блок: блок кода с одной точкой входа и одной точкой выхода.

#pragma omp parallel{

#pragma omp parallel{

…mainloop: res[id] = f (id);if (res[id] != 0) goto mainloop;

…mainloop: res[id] = f (id);…( [ ] ) g p

…exit (0);

} С й б

}if (res[id] != 0) goto mainloop; Н й б

5 сентябряМосква, 2019 Технология параллельного программирования OpenMP 89 из 274

} Структурный блок Не структурный блок

Page 90: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Составные директивы

#pragma omp parallel private(i){

#pragma omp parallel for private(i) \fi t i t ( ){

#pragma omp for firstprivate(n)for (i = 1; i <= n; i ++)

firstprivate(n)for (i = 1; i <= n; i ++)

{( ){

A[i]=A[i]+ B[i];}

A[i]=A[i]+ B[i];}

}

5 сентябряМосква, 2019 Технология параллельного программирования OpenMP 90 из 274

Page 91: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Компиляторы, поддеживающие OpenMPOpenMP 4 5:OpenMP 4.5: GNU gcc (6.1): Linux, Solaris, AIX, MacOSX, Windows, FreeBSD,

NetBSD, OpenBSD, DragonFly BSD, HPUX, RTEMS Intel 17.0: Linux, Windows and MacOSOpenMP 4.0: Oracle Developer Studio12.5: Linux and Solaris Oracle Developer Studio12.5: Linux and Solaris Cray Compiling Environment (CCE) 8.5 LLVM: clang Linux and MacOSOpenMP 3.0: PGI 8.0: Linux and Windows IBM 10.1: Linux and AIX http://www.openmp.org/resources/

Absoft Pro FortranMP: 11.1 NAG Fortran Complier 5.3П O MP

p p p gopenmp‐compilers/

Предыдущие версии OpenMP: Lahey/Fujitsu Fortran 95 PathScale

5 сентябряМосква, 2019 Технология параллельного программирования OpenMP 91 из 274

Microsoft Visual Studio 2008 C++ HP

Page 92: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Компиляция OpenMP‐программы

Производитель Компилятор Опция компиляции

GNU gcc -fopenmp

LLVM clang -fopenmpLLVM clang fopenmp

IBM XL C/C++ / Fortran -qsmp=omp

Oracle C/C++ / Fortran -xopenmp

Intel C/C++ / Fortran -openmp, -qopenmp/Qopenmp

Portland Group C/C++ / Fortran -mp

Mi ft Vi l St di 2008 C /5 сентябряМосква, 2019 Технология параллельного программирования OpenMP 92 из 274

Microsoft Visual Studio 2008 C++ /openmp

Page 93: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Условная компиляция OpenMP‐программы

#include <stdio.h>#i l d h // О ф й#include <omp.h> // Описаны прототипы всех функций и типовint main(){{#ifdef _OPENMP

printf("Compiled by an OpenMP-compliant implementation.\n");p ( p y p p p );int id = omp_get_max_threads ();

#endifreturn 0;

}В й OPENMP ф ( )В значении переменной _OPENMP зашифрован год и месяц (yyyymm) версии стандарта OpenMP, которую поддерживает компилятор.

5 сентябряМосква, 2019 Технология параллельного программирования OpenMP 93 из 274

Page 94: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Выполнение OpenMP‐программы

Fork-Join параллелизм: Г ( t ) (t ) й Главная (master) нить порождает группу (team) нитей по мере

небходимости. Параллелизм добавляется инкрементально.р р

Параллельные области

5 сентябряМосква, 2019 Технология параллельного программирования OpenMP 94 из 274

Page 95: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Модель памяти в OpenMP

001Нить

001Нить001Нить

5 сентябряМосква, 2019 Технология параллельного программирования OpenMP 95 из 274

Page 96: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Фрагмент программы

int a, b, c, d, x, y; // переменныеint *p, *q; // указателиint f(int *p, int *q); // прототип функции...a = x * (x - 1); // a хранится в регистреb = y * (y + 1); // b хранится в регистреy (y ); р р рc = a * a + a * b + b * b; // будет использовано позднееd = a * b * c; // будет использовано позднееp = &a; // получает адрес aq = &b; // получает адрес bx = f(p q); // вызов функцииx = f(p, q); // вызов функции

5 сентябряМосква, 2019 Технология параллельного программирования OpenMP 96 из 274

Page 97: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Когерентность и консистентность памяти

P0: W(x)a R(y)b Время

P1: W(y)b R(y)b R(x)a W(x)b

Процессор

Процессор

Кэш Кэш

Оперативная память

Оперативная память

Сеть передачи данных р

5 сентябряМосква, 2019 Технология параллельного программирования OpenMP 97 из 274

Page 98: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Модели консистентности памяти

Модель консистентности представляет собой некоторый договор между бпрограммами и памятью, в котором указывается, что при соблюдении

программами определенных правил работа памяти будет корректной, если же требования к программе будут нарушены, то память не гарантирует правильность выполнения операций чтения/записи.

Далее рассматриваются основные модели консистентности Далее рассматриваются основные модели консистентности.

5 сентябряМосква, 2019 Технология параллельного программирования OpenMP 98 из 274

Page 99: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Строгая консистентность

Операция чтения ячейки памяти с адресом X должна возвращать й й й Xзначение, записанное самой последней операцией записи с адресом X,

называется моделью строгой консистентности.a) строгая консистентность) р

P0: W(x)a Время

P1: R(x)a

б) нестрогая консистентность

P0: W(x)a Время

P1 R( )NIL R( )aP1: R(x)NIL R(x)a5 сентябряМосква, 2019 Технология параллельного программирования OpenMP 99 из 274

Page 100: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Последовательная консистентность

Впервые определил Lamport в 1979 г. в контексте совместно йиспользуемой памяти для мультипроцессорных систем.

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

Последовательная консистентность не гарантирует что операция чтения Последовательная консистентность не гарантирует, что операция чтения возвратит значение, записанное другим процессом наносекундой или даже минутой раньше, в этой модели только точно гарантируется, что все

йпроцессы знают последовательность всех записей в память.

5 сентябряМосква, 2019 Технология параллельного программирования OpenMP 100 из 274

Page 101: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Последовательная консистентность

а) удовлетворяет последовательной консистентности

P1 W(x)aP1 W(x)a

P2 W(x)b

P3 R(x)b R(x)a

P4 R(x)b R(x)a

б) не удовлетворяет последовательной консистентности

P1 W(x)aP1 W(x)a

P2 W(x)b

P3 R(x)b R(x)a

P4 R(x)a R(x)b( ) ( )

5 сентябряМосква, 2019 Технология параллельного программирования OpenMP 101 из 274

Page 102: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Причинная консистентность

Предположим, что процесс P1 модифицировал переменную x, затем процесс P2 прочитал x и модифицировал y В этом случаепроцесс P2 прочитал x и модифицировал y. В этом случае модификация x и модификация y потенциально причинно зависимы, так как новое значение y могло зависеть от прочитанного значения

й С йпеременной x. С другой стороны, если два процесса одновременно изменяют значения различных переменных, то между этими событиями нет причинной связи.

Операции, которые причинно не зависят друг от друга называются параллельными.

Причинная модель консистентности памяти определяется следующим Причинная модель консистентности памяти определяется следующим условием: Последовательность операций записи, которые потенциально причинно зависимы, должна наблюдаться всеми ро есса с с е о а о о ара е е о ера за с опроцессами системы одинаково, параллельные операции записи могут наблюдаться разными процессами в разном порядке.

5 сентябряМосква, 2019 Технология параллельного программирования OpenMP 102 из 274

Page 103: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Причинная консистентность

P1 W(x)aНарушение моделиP2 R(x)a W(x)b

P3 R(x)b R(x)a

Нарушение модели причинной консистентности

P4 R(x)a R(x)b

P1 W( ) W( )P1 W(x)a W(x)c

P2 R(x)a W(x)bКорректная последовательность для модели P3 R(x)a R(x)c R(x)b

P4 R(x)a R(x)b R(x)c

для модели причинной консистентности

Определение потенциальной причинной зависимости может осуществляться компилятором посредством анализа зависимости операторов программы по даннымданным.

5 сентябряМосква, 2019 Технология параллельного программирования OpenMP 103 из 274

Page 104: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

PRAM (Pipelined RAM) и процессорная консистентность

PRAM: Операции записи, выполняемые одним процессором, видны всем остальным процессорам в том порядке, в каком они выполнялись, но операции записи, выполняемые разными процессорами, могут быть видны в произвольном порядке. Записи выполняемые одним процессором могут быть конвейеризованы:Записи выполняемые одним процессором могут быть конвейеризованы: выполнение операций с общей памятью можно начинать не дожидаясь завершения предыдущих операций записи в память.П PRAM Д й йПроцессорная: PRAM + когерентность памяти. Для каждой переменной X есть общее согласие относительно порядка, в котором процессоры модифицируют эту переменную, операции записи в разные переменные -параллельны. Таким образом, к упорядочиванию записей каждого процессора добавляется упорядочивание записей в переменные или группы. ру

5 сентябряМосква, 2019 Технология параллельного программирования OpenMP 104 из 274

Page 105: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Слабая консистентность (weak consistency)

Пусть процесс в критической секции циклически читает и записывает значение некоторых переменных. Даже, если остальные процессоры и не пытаются обращаться к этим переменным до выхода первого процесса из критической секции, для удовлетворения требований рассматриваемых ранее моделей консистентности они должны р р р д двидеть все записи первого процессора в порядке их выполнения, что, естественно, совершенно не нужно.

Наилучшее решение в такой ситуации это позволить первому Наилучшее решение в такой ситуации - это позволить первому процессу завершить выполнение критической секции и, только после этого, переслать остальным процессам значения модифицированных

бпеременных, не заботясь о пересылке промежуточных результатов.

5 сентябряМосква, 2019 Технология параллельного программирования OpenMP 105 из 274

Page 106: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Слабая консистентность (weak consistency)

Модель слабой консистентности, основана на выделении среди переменных специальных синхронизационных переменных и описывается следующими правилами:

1. Доступ к синхронизационным переменным определяется моделью последовательной консистентности;последовательной консистентности;

2. Доступ к синхронизационным переменным запрещен (задерживается), пока не выполнены все предыдущие операции записи;

3. Доступ к данным (запись, чтение) запрещен, пока не выполнены все предыдущие обращения к синхронизационным переменным. р у р р р

5 сентябряМосква, 2019 Технология параллельного программирования OpenMP 106 из 274

Page 107: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Слабая консистентность (weak consistency)

Первое правило определяет, что все процессы видят обращения к синхронизационным переменным в определенном (одном и том же) порядке.

Второе правило гарантирует, что выполнение процессором операции обращения к синхронизационной переменной возможно только послеобращения к синхронизационной переменной возможно только после выталкивания конвейера (полного завершения выполнения на всех процессорах всех предыдущих операций записи переменных, выданных данным процессором)выданных данным процессором).

Третье правило определяет, что при обращении к обычным (не синхронизационным) переменным на чтение или запись, все предыдущие обращения к синхронизационным переменным должны быть выполнены полностью. Выполнив синхронизацию перед обращением к общей переменной, процесс может быть уверен, что р щ щ р , р ц у р ,получит правильное значение этой переменной.

5 сентябряМосква, 2019 Технология параллельного программирования OpenMP 107 из 274

Page 108: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Слабая консистентность (weak consistency)

P1 W(x)a W(x)b S

P2 R(x)a R(x)b S

Допустимая последователь-ность событий

P3 R(x)b S

ность событий

P1 W(x)a W(x)b S

P2 S R( )

Недопустимаяпоследовательностьб й P2 S R(x)aсобытий

...

5 сентябряМосква, 2019 Технология параллельного программирования OpenMP 108 из 274

Page 109: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Модель памяти в OpenMP

static int i = 0;… = i + 5;#pragma omp flush (i)i = 1

i = 1

001Нить 1i = i + 1;i = 0i = 1#pragma omp flush (i)

001Нить 0

… = i + 2; // ?

5 сентябряМосква, 2019 Технология параллельного программирования OpenMP 109 из 274

Page 110: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Консистентность памяти в OpenMP

Корректная последовательность работы нитей с переменной: Нить0 записывает значение переменной – write (var)р ( ) Нить0 выполняет операцию синхронизации – flush (var) Нить1 выполняет операцию синхронизации – flush (var) Н 1 й d ( ) Нить1 читает значение переменной – read (var)

1: A = 11: A = 1. . .2: flush(A)us ( )

5 сентябряМосква, 2019 Технология параллельного программирования OpenMP 110 из 274

Page 111: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Консистентность памяти в OpenMP

#pragma omp flush [(список переменных)]

По умолчанию все переменные приводятся в консистентное состояние(#pragma omp flush):

при барьерной синхронизации; при входе и выходе из конструкций parallel, critical и ordered; при выходе из конструкций распределения работ (for, single, при выходе из конструкций распределения работ (for, single,

sections, workshare), если не указана клауза nowait; при вызове omp_set_lock и omp_unset_lock; t t l k t t l k при вызове omp_test_lock, omp_set_nest_lock,

omp_unset_nest_lock и omp_test_nest_lock, если изменилось состояние семафора.

При входе и выходе из конструкции atomic выполняется #pragma ompflush(x), где x – переменная, изменяемая в конструкции atomic.

5 сентябряМосква, 2019 Технология параллельного программирования OpenMP 111 из 274

Page 112: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Консистентность памяти в OpenMP

1. Если пересечение множеств переменных, указанных в операциях flush, выполняемых различными нитями не пустое, то результат выполнения

й fl h б бопераций flush будет таким, как если бы эти операции выполнялись в некоторой последовательности (единой для всех нитей).

2. Если пересечение множеств переменных, указанных в операциях flush, р р , у р ц ,выполняемых одной нитью не пустое, то результат выполнения операций flush, будет таким, как если бы эти операции выполнялись в порядке определяемом программойопределяемом программой.

3. Если пересечение множеств переменных, указанных в операциях flush, пустое, то операции flush могут выполняться независимо (в любом

)порядке).

5 сентябряМосква, 2019 Технология параллельного программирования OpenMP 112 из 274

Page 113: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Классы переменных

В модели программирования с разделяемой памятью: • Большинство переменных по умолчанию считаются sharedр у

Глобальные переменные совместно используются всеми нитями(shared) :

Фортран: COMMON блоки SAVE переменные MODULE• Фортран: COMMON блоки, SAVE переменные, MODULE переменные

• Си: file scope, static• Динамически выделяемая память (ALLOCATE, malloc, new)

Но не все переменные являются разделяемыми ...• Стековые переменные в подпрограммах (функциях)• Стековые переменные в подпрограммах (функциях), вызываемых из параллельного региона, являются private.

• Переменные объявленные внутри блока операторов параллельного региона являются приватнымипараллельного региона являются приватными.

• Счетчики циклов витки которых распределяются между нитями при помощи конструкций for и parallel for.

5 сентябряМосква, 2019 Технология параллельного программирования OpenMP 113 из 274

Page 114: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Классы переменных

#define N 100double Array1[N];int main() {

extern double Array1[N];void work(int *Array, int i) {int main() {

int Array2[N],i;#pragma omp parallel

{

void work(int Array, int i) {double TempArray[10];static int count;

{int iam = omp_get_thread_num();#pragma omp forfor (i=0;i < N; i++)

...}

for (i 0;i < N; i++)work(Array2, i);

}printf(“%d\n”, Array2[0]);

TempArray, iam, ip ( % , y [ ]);

}TempArray,

iam, iArray1, Array2,

countArray1, Array2,

count

TempArray, iam i

Технология параллельного программирования OpenMP

iam, i

5 сентябряМосква, 2019 114 из 274

Page 115: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Классы переменных

Можно изменить класс переменной при помощи конструкций: shared (список переменных)s a ed (с со ере е ) private (список переменных) firstprivate (список переменных) lastprivate (список переменных) threadprivate (список переменных) default (private | shared | none) default (private | shared | none)

5 сентябряМосква, 2019 Технология параллельного программирования OpenMP 115 из 274

Page 116: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Конструкция private

Конструкция «private(var)» создает локальную копию переменной «var» в каждой из нитей.

З й• Значение переменной не инициализировано• Приватная копия не связана с оригинальной переменной• В OpenMP 2 5 значение переменной «var» не определеноВ OpenMP 2.5 значение переменной «var» не определено после завершения параллельной конструкции

sum = -1.0;#pragma omp parallel for private (i j sum)#pragma omp parallel for private (i,j,sum)for (i=0; i< m; i++){

0 0sum = 0.0;for (j=0; j< n; j++)sum +=b[i][j]*c[j];

a[i] = sum;}// sum == -1.0

5 сентябряМосква, 2019 Технология параллельного программирования OpenMP 116 из 274

Page 117: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Конструкция firstprivate

«firstprivate» является специальным случаем «private»Инициализирует каждую приватную копию соответствующимц ру ду р у у щзначением из главной (master) нити.

BOOL Fi tTi TRUEBOOL FirstTime=TRUE; #pragma omp parallel for firstprivate(FirstTime) for (row=0; row<height; row++) {

if (FirstTime == TRUE) { FirstTime = FALSE; FirstWork (row); }AnotherWork (row);AnotherWork (row);

}

5 сентябряМосква, 2019 Технология параллельного программирования OpenMP 117 из 274

Page 118: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Конструкция lastprivate

lastprivate передает значение приватной переменной, посчитанной на последней итерации в глобальную переменнуюпоследней итерации в глобальную переменную.

int i;int i;#pragma omp parallel{

#pragma omp for lastprivate(i)#pragma omp for lastprivate(i)for (i=0; i<n-1; i++)

a[i] = b[i] + b[i+1];

}a[i]=b[i]; /*i == n-1*/

5 сентябряМосква, 2019 Технология параллельного программирования OpenMP 118 из 274

Page 119: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Директива threadprivate

Отличается от применения конструкции private: private скрывает глобальные переменныеp р р threadprivate – переменные сохраняют глобальную область

видимости внутри каждой нити#pragma omp threadprivate (Var)#pragma omp threadprivate (Var)

Если количество нитей не изменилось, то каждая нить получит

Var = 1 … = Varу

значение, посчитанное в предыдущей параллельной области.

Var = 2 … = Var

5 сентябряМосква, 2019 Технология параллельного программирования OpenMP 119 из 274

Page 120: Суперкомпьютеры параллельная обработка данныхdvmh.keldysh.ru/attachments/download/1608/Lecture1-3.pdfСуперкомпьютеры и параллельная

Конструкция default

Меняет класс переменной по умолчанию: default (shared) действует по умолчанию default (shared) – действует по умолчанию default (private) – есть только в Fortran default (firstprivate) – есть только в Fortran OpenMP 3.1

itotal = 100 itotal = 100

default (none) – требует определить класс для каждой переменной

#pragma omp parallel private(np,each){

#pragma omp parallel default(none) private(np,each) shared (itotal){{

np = omp_get_num_threads()each = itotal/np

{np = omp_get_num_threads()each = itotal/np

………}

………}

5 сентябряМосква, 2019 Технология параллельного программирования OpenMP 120 из 274