SlideShare a Scribd company logo
1 of 45
Download to read offline
Основы распараллеливания
С/С++ программ при помощи OpenMP
Обо мне
• Преподаватель ОНПУ кафедры
Системного программного
обеспечения
• Основатель FlyElephant и
GeeksLab.
План
• Часть 1. Основы распараллеливания С/С++
программ при помощи OpenMP
• Часть 2. Знакомство с FlyElephant
История вычислительной техники
История вычислительной техники
Cray-1
1976 год
133 Мфлопса
История вычислительной техники
IBM POWER4
2001 год
2 ядра
История вычислительной техники
GPU и CUDA
2007 год
История вычислительной техники
Intel MIC - 2010 год
32 ядра
Ребрендинг в Xeon Phi
2012 год
61 ядро
~1 TFLOPS
Инфраструктура
Модели параллельных программ
Вычислительные системы с общей памятью
Системы с распределенной памятью
Гибридные системы
Системы с общей памятью
• Преимущества:
• Не требуется обмен данными
• Просто писать программы
• Компактность систем
• Недостатки:
• Проблема совместного доступа к памяти
• Проблема синхронности кэшей
• Ограниченный обьем ОЗУ
• Проблема масштабируемости
Системы с распределённой памятью
• Преимущества:
• Простота и дешевизна построения
• Эффективное решение задач, требующих малого обмена данными
• Возможность решать задачи, требующие очень больших объёмов
оперативной памяти
• Возможность масштабирования
• Недостатки:
• Проблема обмена данными
• Сложное программирование
• Большой размер систем
• Большое энергопотребление
Гибридные системы
Инструментарий
OpenMP
Open Multi-Processing
MPI
Message Passing Interface
Hadoop
Spark
OpenMP
OpenMP (Open Multi-Processing)
открытый стандарт для распараллеливание
программ на языках С, С++ и Fortran.
http://openmp.org/
v1 - 1997 год GCC 4.1
v 4.0 - July 2013 Intel C++ Compiler
v 4.1 - в работе Visual C++
Преимущества OpenMP
• Лёгкость использования.
• Кросс-платформенность для систем с общей
памятью.
• Сокрытие низкоуровневых операций.
• Инкрементное распараллеливание.
• Поддержка параллельной и последовательной
версий программ.
Компоненты
• Переменные окружения.
• Директивы компилятора — расширения языков С/
C++ и Fortran.
• Функции.
Модель Fork-Join
master
thread
master
thread
master
thread
F FJ J
OpenMP и GCC
GCC v4.1
-openmp
g++ test.cpp -o test -fopenmp
#include<omp.h>
Переменные окружения
• OMP_NUM_THREADS - Устанавливает количество потоков
в параллельном блоке. По умолчанию, количество потоков
равно количеству виртуальных процессоров.
• OMP_SCHEDULE - Устанавливает тип распределения работ
в параллельных циклах с типом runtime.
• OMP_DYNAMIC - Разрешает или запрещает динамическое
изменение количества потоков, которые реально
используются для вычислений (в зависимости от загрузки
системы). Значение по умолчанию зависит от реализации.
• OMP_NESTED - Разрешает или запрещает вложенный
параллелизм (распараллеливание вложенных циклов). По
умолчанию – запрещено.
Директивы
Формат директивы (С/C ++)
#pragma omp < имя> [ <предложение> {[,] <предложение>}]
имя — имя директивы;
предложение — конструкция, задающая дополнительную
информацию и зависящая от директивы;
Директива parallel
#pragma omp parallel [<предложение>]
<структурный блок>
• Поток, встречающий конструкцию parallel, создаёт команду
потоков, становясь для неё основным.
• Потокам команды присваиваются уникальные целые номера,
начиная с 0 (основной поток).
• Каждый поток исполняет код, определяемый структурным
блоком, в конце которого неявно устанавливается барьер.
Директива parallel
#include <iostream>
#include <omp.h>
int main()
{
#pragma omp parallel
std::cout << "Hello, world!" << std::endl;
}
Директива for
#pragma omp for [<педложения>]
<циклы for>
Ограничения:
• (Единственный) счётчик — целого типа, указатель, или итератор
произвольного доступа. Должен изменяться только в заголовке цикла.
• Условие цикла: сравнение переменной с инвариантным к циклу
выражением при помощи <, <=, >, >=.
• Изменение счётчика: при помощи ++, --, i += d, i -= d, i = i + d, i = d +
i, i = i - d (d — инвариантное к циклу целое выражение)
Директива for
#pragma omp parallel
{
#pragma omp for
for (ptrdiff_t i = 0; i < n; i++)
dst[i] = sqrt(src[i]);
}
#pragma omp parallel for
#pragma omp parallel for
for (ptrdiff_t i = 0; i < n; i++)
dst[i] = sqrt(src[i]);
Другие директивы
single - если в параллельной области какой-либо участок кода должен быть
выполнен лишь один раз.
sections - используется для задания конечного (неитеративного)
параллелизма.
master - выделяет участок кода, который будет выполнен только нитью-
мастером.
critical - оформляется критическая секция программы. Критическая секция
запрещает одновременное исполнение структурированного блока более чем
одним потоком.
barrier - способ синхронизации, дает всем потокам указание ожидать друг
друга перед тем, как они продолжат выполнение за барьером.
Список OpenMP функций
• omp_set_num_threads Установить количество потоков
• omp_get_num_threads Вернуть количество потоков в группе
• omp_get_max_threads Максимальное количество потоков
• omp_get_thread_num ID потока
• omp_get_num_procs Максимальное количество процессоров
• omp_in_parallel В параллельном регионе?
• omp_set_dynamic Activate dynamic thread adjustment
• omp_get_dynamic Check for dynamic thread adjustment
• omp_set_nested Activate nested parallelism
• omp_get_nested Check for nested parallelism
• omp_get_wtime Вернуть время
• omp_get_wtick Number of seconds between clock ticks
Platform for scientific computing
and data management
Какие могут быть задачи?
• Научные расчеты
• Анализ данных
• Рендеринг
• Моделирование
• Прогнозирование
• …
Problems
• Time-consuming deployment and support of the
elastic infrastructure.
• Complicated process of connection between the
large number of computing tools.
Solution
• Platform-as-a-Service that provides elastic multi-
core systems, HPC clusters and GPU clusters.
• Software, templates, algorithms and data available
at one place.
Научный расчет. Как это работает в
реальной жизни
Научный расчет. Как это
работает у нас
Функционал, который есть
сейчас
• загрузка файлов в хранилище;
• запуск вычислительных программ, написаных на С/С++,
которые будут выполняться с помощью компилятора GCC с
поддержкой OpenMP;
• виртуальные машины облака Azure с количеством ядер от 1
до 32 и ОЗУ до 448 ГБ;
• просмотр и скачивание файлов результатов расчета;
• биллинг, пополнение счета при помощи пластиковых карт и
промо-кодов.
Программа бета-
тестирования
• Получить бесплатный доступ
• Использовать новые функции первыми
• Помогать сделать FlyElephant лучше
http://flyelephant.net/beta/
Функционал, который ждет
нас в скором будущем
• Поддержка Python, R, Java и MPI.
• Система визуализации результатов
• Система управления результатами расчетов
• Внутренняя социальная сеть
• Система API
Отдельный интерфейс
для учебного процесса
Поддержка открытых
научных исследований
d.spodarets@flyelephant.net

flyelephant.net

More Related Content

What's hot

Длинная транзакция или когда размер имеет значение / Михаил Балаян (Odin — In...
Длинная транзакция или когда размер имеет значение / Михаил Балаян (Odin — In...Длинная транзакция или когда размер имеет значение / Михаил Балаян (Odin — In...
Длинная транзакция или когда размер имеет значение / Михаил Балаян (Odin — In...Ontico
 
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...Ontico
 
Как построить кластер для расчета сотен тысяч high-CPU/high-MEM-задач и не ра...
Как построить кластер для расчета сотен тысяч high-CPU/high-MEM-задач и не ра...Как построить кластер для расчета сотен тысяч high-CPU/high-MEM-задач и не ра...
Как построить кластер для расчета сотен тысяч high-CPU/high-MEM-задач и не ра...Ontico
 
Нагрузочное тестирование с помощью Яндекс.Танка
Нагрузочное тестирование с помощью Яндекс.ТанкаНагрузочное тестирование с помощью Яндекс.Танка
Нагрузочное тестирование с помощью Яндекс.ТанкаAleksandr Boichenko
 
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...Ontico
 
Нагрузочное тестирование с помощью Яндекс.Танк - Алексей Лавренюк, PyCon RU 2...
Нагрузочное тестирование с помощью Яндекс.Танк - Алексей Лавренюк, PyCon RU 2...Нагрузочное тестирование с помощью Яндекс.Танк - Алексей Лавренюк, PyCon RU 2...
Нагрузочное тестирование с помощью Яндекс.Танк - Алексей Лавренюк, PyCon RU 2...it-people
 
"Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металли...
"Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металли..."Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металли...
"Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металли...Ontico
 
Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)
Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)
Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)Ontico
 
Доклад в Mail.ru 01.11.12
Доклад в Mail.ru 01.11.12Доклад в Mail.ru 01.11.12
Доклад в Mail.ru 01.11.12Alex Tutubalin
 
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...Ontico
 
Artisto: опыт запуска нейросетей в production / Эдуард Тянтов (Mail.ru Group)
Artisto: опыт запуска нейросетей в production / Эдуард Тянтов (Mail.ru Group)Artisto: опыт запуска нейросетей в production / Эдуард Тянтов (Mail.ru Group)
Artisto: опыт запуска нейросетей в production / Эдуард Тянтов (Mail.ru Group)Ontico
 
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)Ontico
 
сервис нагрузочного тестирования Ddosme.ru, иван самсонов
сервис нагрузочного тестирования Ddosme.ru, иван самсоновсервис нагрузочного тестирования Ddosme.ru, иван самсонов
сервис нагрузочного тестирования Ddosme.ru, иван самсоновOntico
 
Отладка и устранение проблем в PostgreSQL Streaming Replication.
Отладка и устранение проблем в PostgreSQL Streaming Replication.Отладка и устранение проблем в PostgreSQL Streaming Replication.
Отладка и устранение проблем в PostgreSQL Streaming Replication.Alexey Lesovsky
 
Zabbix: рецепты высокопроизводительного мониторинга / Алексей Владышев (Zabbix)
Zabbix: рецепты высокопроизводительного мониторинга / Алексей Владышев (Zabbix)Zabbix: рецепты высокопроизводительного мониторинга / Алексей Владышев (Zabbix)
Zabbix: рецепты высокопроизводительного мониторинга / Алексей Владышев (Zabbix)Ontico
 
Олесь Писаренко "Открываем Яндекс.Танк"
Олесь Писаренко "Открываем Яндекс.Танк"Олесь Писаренко "Открываем Яндекс.Танк"
Олесь Писаренко "Открываем Яндекс.Танк"Yandex
 
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...Ontico
 
Nonblocking algorithms/CAS/Atomics by Alexey Fyodorov
Nonblocking algorithms/CAS/Atomics by Alexey FyodorovNonblocking algorithms/CAS/Atomics by Alexey Fyodorov
Nonblocking algorithms/CAS/Atomics by Alexey FyodorovJavaDayUA
 
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...Ontico
 

What's hot (20)

Длинная транзакция или когда размер имеет значение / Михаил Балаян (Odin — In...
Длинная транзакция или когда размер имеет значение / Михаил Балаян (Odin — In...Длинная транзакция или когда размер имеет значение / Михаил Балаян (Odin — In...
Длинная транзакция или когда размер имеет значение / Михаил Балаян (Odin — In...
 
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
 
Как построить кластер для расчета сотен тысяч high-CPU/high-MEM-задач и не ра...
Как построить кластер для расчета сотен тысяч high-CPU/high-MEM-задач и не ра...Как построить кластер для расчета сотен тысяч high-CPU/high-MEM-задач и не ра...
Как построить кластер для расчета сотен тысяч high-CPU/high-MEM-задач и не ра...
 
Нагрузочное тестирование с помощью Яндекс.Танка
Нагрузочное тестирование с помощью Яндекс.ТанкаНагрузочное тестирование с помощью Яндекс.Танка
Нагрузочное тестирование с помощью Яндекс.Танка
 
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...
 
Нагрузочное тестирование с помощью Яндекс.Танк - Алексей Лавренюк, PyCon RU 2...
Нагрузочное тестирование с помощью Яндекс.Танк - Алексей Лавренюк, PyCon RU 2...Нагрузочное тестирование с помощью Яндекс.Танк - Алексей Лавренюк, PyCon RU 2...
Нагрузочное тестирование с помощью Яндекс.Танк - Алексей Лавренюк, PyCon RU 2...
 
"Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металли...
"Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металли..."Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металли...
"Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металли...
 
Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)
Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)
Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)
 
Доклад в Mail.ru 01.11.12
Доклад в Mail.ru 01.11.12Доклад в Mail.ru 01.11.12
Доклад в Mail.ru 01.11.12
 
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...
 
Artisto: опыт запуска нейросетей в production / Эдуард Тянтов (Mail.ru Group)
Artisto: опыт запуска нейросетей в production / Эдуард Тянтов (Mail.ru Group)Artisto: опыт запуска нейросетей в production / Эдуард Тянтов (Mail.ru Group)
Artisto: опыт запуска нейросетей в production / Эдуард Тянтов (Mail.ru Group)
 
RootConf 2015
RootConf 2015RootConf 2015
RootConf 2015
 
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
 
сервис нагрузочного тестирования Ddosme.ru, иван самсонов
сервис нагрузочного тестирования Ddosme.ru, иван самсоновсервис нагрузочного тестирования Ddosme.ru, иван самсонов
сервис нагрузочного тестирования Ddosme.ru, иван самсонов
 
Отладка и устранение проблем в PostgreSQL Streaming Replication.
Отладка и устранение проблем в PostgreSQL Streaming Replication.Отладка и устранение проблем в PostgreSQL Streaming Replication.
Отладка и устранение проблем в PostgreSQL Streaming Replication.
 
Zabbix: рецепты высокопроизводительного мониторинга / Алексей Владышев (Zabbix)
Zabbix: рецепты высокопроизводительного мониторинга / Алексей Владышев (Zabbix)Zabbix: рецепты высокопроизводительного мониторинга / Алексей Владышев (Zabbix)
Zabbix: рецепты высокопроизводительного мониторинга / Алексей Владышев (Zabbix)
 
Олесь Писаренко "Открываем Яндекс.Танк"
Олесь Писаренко "Открываем Яндекс.Танк"Олесь Писаренко "Открываем Яндекс.Танк"
Олесь Писаренко "Открываем Яндекс.Танк"
 
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
 
Nonblocking algorithms/CAS/Atomics by Alexey Fyodorov
Nonblocking algorithms/CAS/Atomics by Alexey FyodorovNonblocking algorithms/CAS/Atomics by Alexey Fyodorov
Nonblocking algorithms/CAS/Atomics by Alexey Fyodorov
 
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
 

Viewers also liked

Вебинар: Введение в машинное обучение
Вебинар: Введение в машинное обучениеВебинар: Введение в машинное обучение
Вебинар: Введение в машинное обучениеFlyElephant
 
Infrastructure for the work of Data Scientists
Infrastructure for the work of Data ScientistsInfrastructure for the work of Data Scientists
Infrastructure for the work of Data ScientistsFlyElephant
 
Dmitry Spodarets_Infrastructure for the work of data scientists
Dmitry Spodarets_Infrastructure for the work of data scientistsDmitry Spodarets_Infrastructure for the work of data scientists
Dmitry Spodarets_Infrastructure for the work of data scientistsFlyElephant
 
Вебинар: Инструменты для работы Data Scientist
Вебинар: Инструменты для работы Data ScientistВебинар: Инструменты для работы Data Scientist
Вебинар: Инструменты для работы Data ScientistFlyElephant
 
GRID-технологии в физическом эксперименте (Введение)
GRID-технологии в физическом эксперименте (Введение)GRID-технологии в физическом эксперименте (Введение)
GRID-технологии в физическом эксперименте (Введение)Dmitry Spodarets
 
Environment for training models
Environment for training modelsEnvironment for training models
Environment for training modelsFlyElephant
 
PVS-Studio. Static code analyzer. Windows/Linux, C/C++/C#. 2017
PVS-Studio. Static code analyzer. Windows/Linux, C/C++/C#. 2017PVS-Studio. Static code analyzer. Windows/Linux, C/C++/C#. 2017
PVS-Studio. Static code analyzer. Windows/Linux, C/C++/C#. 2017Andrey Karpov
 
[Impact Lab] IT инструменты для проекта
[Impact Lab] IT инструменты для проекта[Impact Lab] IT инструменты для проекта
[Impact Lab] IT инструменты для проектаDmitry Spodarets
 
Containers for Science and High-Performance Computing
Containers for Science and High-Performance ComputingContainers for Science and High-Performance Computing
Containers for Science and High-Performance ComputingDmitry Spodarets
 

Viewers also liked (10)

Вебинар: Введение в машинное обучение
Вебинар: Введение в машинное обучениеВебинар: Введение в машинное обучение
Вебинар: Введение в машинное обучение
 
Infrastructure for the work of Data Scientists
Infrastructure for the work of Data ScientistsInfrastructure for the work of Data Scientists
Infrastructure for the work of Data Scientists
 
Dmitry Spodarets_Infrastructure for the work of data scientists
Dmitry Spodarets_Infrastructure for the work of data scientistsDmitry Spodarets_Infrastructure for the work of data scientists
Dmitry Spodarets_Infrastructure for the work of data scientists
 
Вебинар: Инструменты для работы Data Scientist
Вебинар: Инструменты для работы Data ScientistВебинар: Инструменты для работы Data Scientist
Вебинар: Инструменты для работы Data Scientist
 
Spodarets Pereslavl 2009
Spodarets Pereslavl 2009Spodarets Pereslavl 2009
Spodarets Pereslavl 2009
 
GRID-технологии в физическом эксперименте (Введение)
GRID-технологии в физическом эксперименте (Введение)GRID-технологии в физическом эксперименте (Введение)
GRID-технологии в физическом эксперименте (Введение)
 
Environment for training models
Environment for training modelsEnvironment for training models
Environment for training models
 
PVS-Studio. Static code analyzer. Windows/Linux, C/C++/C#. 2017
PVS-Studio. Static code analyzer. Windows/Linux, C/C++/C#. 2017PVS-Studio. Static code analyzer. Windows/Linux, C/C++/C#. 2017
PVS-Studio. Static code analyzer. Windows/Linux, C/C++/C#. 2017
 
[Impact Lab] IT инструменты для проекта
[Impact Lab] IT инструменты для проекта[Impact Lab] IT инструменты для проекта
[Impact Lab] IT инструменты для проекта
 
Containers for Science and High-Performance Computing
Containers for Science and High-Performance ComputingContainers for Science and High-Performance Computing
Containers for Science and High-Performance Computing
 

Similar to Вебинар: Основы распараллеливания С++ программ при помощи OpenMP

Лекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPЛекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPMikhail Kurnosov
 
Семинар 1. Многопоточное программирование на OpenMP (часть 1)
Семинар 1. Многопоточное программирование на OpenMP (часть 1)Семинар 1. Многопоточное программирование на OpenMP (часть 1)
Семинар 1. Многопоточное программирование на OpenMP (часть 1)Mikhail Kurnosov
 
кластеры и суперкомпьютеры
кластеры и суперкомпьютерыкластеры и суперкомпьютеры
кластеры и суперкомпьютерыnastena07051995
 
TMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: GenodeTMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: GenodeIosif Itkin
 
Создание и развитие отечественной платформы с открытым программным кодом для ...
Создание и развитие отечественной платформы с открытым программным кодом для ...Создание и развитие отечественной платформы с открытым программным кодом для ...
Создание и развитие отечественной платформы с открытым программным кодом для ...ARCCN
 
Пути увеличения эффективности реализации алгоритмов машинного обучения
Пути увеличения эффективности реализации алгоритмов машинного обученияПути увеличения эффективности реализации алгоритмов машинного обучения
Пути увеличения эффективности реализации алгоритмов машинного обученияAndrew Babiy
 
Java Platform Performance BoF
Java Platform Performance BoFJava Platform Performance BoF
Java Platform Performance BoFDmitry Buzdin
 
Сергей Еланцев - Troubleshooting
Сергей Еланцев - Troubleshooting   Сергей Еланцев - Troubleshooting
Сергей Еланцев - Troubleshooting Yandex
 
Лекция 7: Многопоточное программирование: часть 3 (OpenMP)
Лекция 7: Многопоточное программирование: часть 3 (OpenMP)Лекция 7: Многопоточное программирование: часть 3 (OpenMP)
Лекция 7: Многопоточное программирование: часть 3 (OpenMP)Mikhail Kurnosov
 
Лекция 7: Фибоначчиевы кучи (Fibonacci heaps)
Лекция 7: Фибоначчиевы кучи (Fibonacci heaps)Лекция 7: Фибоначчиевы кучи (Fibonacci heaps)
Лекция 7: Фибоначчиевы кучи (Fibonacci heaps)Mikhail Kurnosov
 
Anton Tsitou "Cycle ORM and Graphs"
Anton Tsitou "Cycle ORM and Graphs"Anton Tsitou "Cycle ORM and Graphs"
Anton Tsitou "Cycle ORM and Graphs"Fwdays
 
Лекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPЛекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPMikhail Kurnosov
 
20090720 hpc exercise1
20090720 hpc exercise120090720 hpc exercise1
20090720 hpc exercise1Michael Karpov
 
Отказоустойчивый микрокластер своими руками, Виталий Гаврилов (Ленвендо)
Отказоустойчивый микрокластер своими руками, Виталий Гаврилов (Ленвендо)Отказоустойчивый микрокластер своими руками, Виталий Гаврилов (Ленвендо)
Отказоустойчивый микрокластер своими руками, Виталий Гаврилов (Ленвендо)Ontico
 
RUNOS OpenFlow controller (ru)
RUNOS OpenFlow controller (ru)RUNOS OpenFlow controller (ru)
RUNOS OpenFlow controller (ru)Alexander Shalimov
 
CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...
CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...
CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...CodeFest
 
Использование 0MQ для построения распределёных систем (Андрей Охлопков, Алекс...
Использование 0MQ для построения распределёных систем (Андрей Охлопков, Алекс...Использование 0MQ для построения распределёных систем (Андрей Охлопков, Алекс...
Использование 0MQ для построения распределёных систем (Андрей Охлопков, Алекс...Ontico
 
архитектура новой почты рамблера
архитектура новой почты рамблераархитектура новой почты рамблера
архитектура новой почты рамблераHighLoad2009
 

Similar to Вебинар: Основы распараллеливания С++ программ при помощи OpenMP (20)

Лекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPЛекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMP
 
Семинар 1. Многопоточное программирование на OpenMP (часть 1)
Семинар 1. Многопоточное программирование на OpenMP (часть 1)Семинар 1. Многопоточное программирование на OpenMP (часть 1)
Семинар 1. Многопоточное программирование на OpenMP (часть 1)
 
кластеры и суперкомпьютеры
кластеры и суперкомпьютерыкластеры и суперкомпьютеры
кластеры и суперкомпьютеры
 
TMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: GenodeTMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: Genode
 
Создание и развитие отечественной платформы с открытым программным кодом для ...
Создание и развитие отечественной платформы с открытым программным кодом для ...Создание и развитие отечественной платформы с открытым программным кодом для ...
Создание и развитие отечественной платформы с открытым программным кодом для ...
 
Пути увеличения эффективности реализации алгоритмов машинного обучения
Пути увеличения эффективности реализации алгоритмов машинного обученияПути увеличения эффективности реализации алгоритмов машинного обучения
Пути увеличения эффективности реализации алгоритмов машинного обучения
 
Java Platform Performance BoF
Java Platform Performance BoFJava Platform Performance BoF
Java Platform Performance BoF
 
Сергей Еланцев - Troubleshooting
Сергей Еланцев - Troubleshooting   Сергей Еланцев - Troubleshooting
Сергей Еланцев - Troubleshooting
 
Лекция 7: Многопоточное программирование: часть 3 (OpenMP)
Лекция 7: Многопоточное программирование: часть 3 (OpenMP)Лекция 7: Многопоточное программирование: часть 3 (OpenMP)
Лекция 7: Многопоточное программирование: часть 3 (OpenMP)
 
Лекция 7: Фибоначчиевы кучи (Fibonacci heaps)
Лекция 7: Фибоначчиевы кучи (Fibonacci heaps)Лекция 7: Фибоначчиевы кучи (Fibonacci heaps)
Лекция 7: Фибоначчиевы кучи (Fibonacci heaps)
 
Anton Tsitou "Cycle ORM and Graphs"
Anton Tsitou "Cycle ORM and Graphs"Anton Tsitou "Cycle ORM and Graphs"
Anton Tsitou "Cycle ORM and Graphs"
 
Лекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPЛекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMP
 
20090720 hpc exercise1
20090720 hpc exercise120090720 hpc exercise1
20090720 hpc exercise1
 
Отказоустойчивый микрокластер своими руками, Виталий Гаврилов (Ленвендо)
Отказоустойчивый микрокластер своими руками, Виталий Гаврилов (Ленвендо)Отказоустойчивый микрокластер своими руками, Виталий Гаврилов (Ленвендо)
Отказоустойчивый микрокластер своими руками, Виталий Гаврилов (Ленвендо)
 
Sivko
SivkoSivko
Sivko
 
RUNOS OpenFlow controller (ru)
RUNOS OpenFlow controller (ru)RUNOS OpenFlow controller (ru)
RUNOS OpenFlow controller (ru)
 
CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...
CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...
CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...
 
Использование 0MQ для построения распределёных систем (Андрей Охлопков, Алекс...
Использование 0MQ для построения распределёных систем (Андрей Охлопков, Алекс...Использование 0MQ для построения распределёных систем (Андрей Охлопков, Алекс...
Использование 0MQ для построения распределёных систем (Андрей Охлопков, Алекс...
 
архитектура новой почты рамблера
архитектура новой почты рамблераархитектура новой почты рамблера
архитектура новой почты рамблера
 
Ramail Arch
Ramail ArchRamail Arch
Ramail Arch
 

Вебинар: Основы распараллеливания С++ программ при помощи OpenMP

  • 2. Обо мне • Преподаватель ОНПУ кафедры Системного программного обеспечения • Основатель FlyElephant и GeeksLab.
  • 3. План • Часть 1. Основы распараллеливания С/С++ программ при помощи OpenMP • Часть 2. Знакомство с FlyElephant
  • 8. История вычислительной техники Intel MIC - 2010 год 32 ядра Ребрендинг в Xeon Phi 2012 год 61 ядро ~1 TFLOPS
  • 10.
  • 11. Модели параллельных программ Вычислительные системы с общей памятью Системы с распределенной памятью Гибридные системы
  • 12. Системы с общей памятью • Преимущества: • Не требуется обмен данными • Просто писать программы • Компактность систем • Недостатки: • Проблема совместного доступа к памяти • Проблема синхронности кэшей • Ограниченный обьем ОЗУ • Проблема масштабируемости
  • 13. Системы с распределённой памятью • Преимущества: • Простота и дешевизна построения • Эффективное решение задач, требующих малого обмена данными • Возможность решать задачи, требующие очень больших объёмов оперативной памяти • Возможность масштабирования • Недостатки: • Проблема обмена данными • Сложное программирование • Большой размер систем • Большое энергопотребление
  • 17. OpenMP (Open Multi-Processing) открытый стандарт для распараллеливание программ на языках С, С++ и Fortran. http://openmp.org/ v1 - 1997 год GCC 4.1 v 4.0 - July 2013 Intel C++ Compiler v 4.1 - в работе Visual C++
  • 18. Преимущества OpenMP • Лёгкость использования. • Кросс-платформенность для систем с общей памятью. • Сокрытие низкоуровневых операций. • Инкрементное распараллеливание. • Поддержка параллельной и последовательной версий программ.
  • 19. Компоненты • Переменные окружения. • Директивы компилятора — расширения языков С/ C++ и Fortran. • Функции.
  • 21. OpenMP и GCC GCC v4.1 -openmp g++ test.cpp -o test -fopenmp #include<omp.h>
  • 22. Переменные окружения • OMP_NUM_THREADS - Устанавливает количество потоков в параллельном блоке. По умолчанию, количество потоков равно количеству виртуальных процессоров. • OMP_SCHEDULE - Устанавливает тип распределения работ в параллельных циклах с типом runtime. • OMP_DYNAMIC - Разрешает или запрещает динамическое изменение количества потоков, которые реально используются для вычислений (в зависимости от загрузки системы). Значение по умолчанию зависит от реализации. • OMP_NESTED - Разрешает или запрещает вложенный параллелизм (распараллеливание вложенных циклов). По умолчанию – запрещено.
  • 23. Директивы Формат директивы (С/C ++) #pragma omp < имя> [ <предложение> {[,] <предложение>}] имя — имя директивы; предложение — конструкция, задающая дополнительную информацию и зависящая от директивы;
  • 24. Директива parallel #pragma omp parallel [<предложение>] <структурный блок> • Поток, встречающий конструкцию parallel, создаёт команду потоков, становясь для неё основным. • Потокам команды присваиваются уникальные целые номера, начиная с 0 (основной поток). • Каждый поток исполняет код, определяемый структурным блоком, в конце которого неявно устанавливается барьер.
  • 25. Директива parallel #include <iostream> #include <omp.h> int main() { #pragma omp parallel std::cout << "Hello, world!" << std::endl; }
  • 26. Директива for #pragma omp for [<педложения>] <циклы for> Ограничения: • (Единственный) счётчик — целого типа, указатель, или итератор произвольного доступа. Должен изменяться только в заголовке цикла. • Условие цикла: сравнение переменной с инвариантным к циклу выражением при помощи <, <=, >, >=. • Изменение счётчика: при помощи ++, --, i += d, i -= d, i = i + d, i = d + i, i = i - d (d — инвариантное к циклу целое выражение)
  • 27. Директива for #pragma omp parallel { #pragma omp for for (ptrdiff_t i = 0; i < n; i++) dst[i] = sqrt(src[i]); }
  • 28. #pragma omp parallel for #pragma omp parallel for for (ptrdiff_t i = 0; i < n; i++) dst[i] = sqrt(src[i]);
  • 29. Другие директивы single - если в параллельной области какой-либо участок кода должен быть выполнен лишь один раз. sections - используется для задания конечного (неитеративного) параллелизма. master - выделяет участок кода, который будет выполнен только нитью- мастером. critical - оформляется критическая секция программы. Критическая секция запрещает одновременное исполнение структурированного блока более чем одним потоком. barrier - способ синхронизации, дает всем потокам указание ожидать друг друга перед тем, как они продолжат выполнение за барьером.
  • 30. Список OpenMP функций • omp_set_num_threads Установить количество потоков • omp_get_num_threads Вернуть количество потоков в группе • omp_get_max_threads Максимальное количество потоков • omp_get_thread_num ID потока • omp_get_num_procs Максимальное количество процессоров • omp_in_parallel В параллельном регионе? • omp_set_dynamic Activate dynamic thread adjustment • omp_get_dynamic Check for dynamic thread adjustment • omp_set_nested Activate nested parallelism • omp_get_nested Check for nested parallelism • omp_get_wtime Вернуть время • omp_get_wtick Number of seconds between clock ticks
  • 31.
  • 32. Platform for scientific computing and data management
  • 33. Какие могут быть задачи? • Научные расчеты • Анализ данных • Рендеринг • Моделирование • Прогнозирование • …
  • 34. Problems • Time-consuming deployment and support of the elastic infrastructure. • Complicated process of connection between the large number of computing tools.
  • 35. Solution • Platform-as-a-Service that provides elastic multi- core systems, HPC clusters and GPU clusters. • Software, templates, algorithms and data available at one place.
  • 36.
  • 37. Научный расчет. Как это работает в реальной жизни
  • 38. Научный расчет. Как это работает у нас
  • 39.
  • 40. Функционал, который есть сейчас • загрузка файлов в хранилище; • запуск вычислительных программ, написаных на С/С++, которые будут выполняться с помощью компилятора GCC с поддержкой OpenMP; • виртуальные машины облака Azure с количеством ядер от 1 до 32 и ОЗУ до 448 ГБ; • просмотр и скачивание файлов результатов расчета; • биллинг, пополнение счета при помощи пластиковых карт и промо-кодов.
  • 41. Программа бета- тестирования • Получить бесплатный доступ • Использовать новые функции первыми • Помогать сделать FlyElephant лучше http://flyelephant.net/beta/
  • 42. Функционал, который ждет нас в скором будущем • Поддержка Python, R, Java и MPI. • Система визуализации результатов • Система управления результатами расчетов • Внутренняя социальная сеть • Система API
  • 43. Отдельный интерфейс для учебного процесса Поддержка открытых научных исследований
  • 44.