![Page 1: Вебинар: Основы распараллеливания С++ программ при помощи OpenMP](https://reader034.vdocuments.pub/reader034/viewer/2022042722/58ad04a91a28ab0b408b4b2b/html5/thumbnails/1.jpg)
Основы распараллеливания С/С++ программ при помощи OpenMP
![Page 2: Вебинар: Основы распараллеливания С++ программ при помощи OpenMP](https://reader034.vdocuments.pub/reader034/viewer/2022042722/58ad04a91a28ab0b408b4b2b/html5/thumbnails/2.jpg)
Обо мне
• Преподаватель ОНПУ кафедры Системного программного обеспечения
• Основатель FlyElephant и GeeksLab.
![Page 3: Вебинар: Основы распараллеливания С++ программ при помощи OpenMP](https://reader034.vdocuments.pub/reader034/viewer/2022042722/58ad04a91a28ab0b408b4b2b/html5/thumbnails/3.jpg)
План• Часть 1. Основы распараллеливания С/С++ программ при помощи OpenMP
• Часть 2. Знакомство с FlyElephant
![Page 4: Вебинар: Основы распараллеливания С++ программ при помощи OpenMP](https://reader034.vdocuments.pub/reader034/viewer/2022042722/58ad04a91a28ab0b408b4b2b/html5/thumbnails/4.jpg)
История вычислительной техники
![Page 5: Вебинар: Основы распараллеливания С++ программ при помощи OpenMP](https://reader034.vdocuments.pub/reader034/viewer/2022042722/58ad04a91a28ab0b408b4b2b/html5/thumbnails/5.jpg)
История вычислительной техники
Cray-1
1976 год
133 Мфлопса
![Page 6: Вебинар: Основы распараллеливания С++ программ при помощи OpenMP](https://reader034.vdocuments.pub/reader034/viewer/2022042722/58ad04a91a28ab0b408b4b2b/html5/thumbnails/6.jpg)
История вычислительной техники
IBM POWER4
2001 год
2 ядра
![Page 7: Вебинар: Основы распараллеливания С++ программ при помощи OpenMP](https://reader034.vdocuments.pub/reader034/viewer/2022042722/58ad04a91a28ab0b408b4b2b/html5/thumbnails/7.jpg)
История вычислительной техники
GPU и CUDA
2007 год
![Page 8: Вебинар: Основы распараллеливания С++ программ при помощи OpenMP](https://reader034.vdocuments.pub/reader034/viewer/2022042722/58ad04a91a28ab0b408b4b2b/html5/thumbnails/8.jpg)
История вычислительной техники
Intel MIC - 2010 год32 ядра
Ребрендинг в Xeon Phi2012 год61 ядро
~1 TFLOPS
![Page 9: Вебинар: Основы распараллеливания С++ программ при помощи OpenMP](https://reader034.vdocuments.pub/reader034/viewer/2022042722/58ad04a91a28ab0b408b4b2b/html5/thumbnails/9.jpg)
Инфраструктура
![Page 10: Вебинар: Основы распараллеливания С++ программ при помощи OpenMP](https://reader034.vdocuments.pub/reader034/viewer/2022042722/58ad04a91a28ab0b408b4b2b/html5/thumbnails/10.jpg)
![Page 11: Вебинар: Основы распараллеливания С++ программ при помощи OpenMP](https://reader034.vdocuments.pub/reader034/viewer/2022042722/58ad04a91a28ab0b408b4b2b/html5/thumbnails/11.jpg)
Модели параллельных программ
Вычислительные системы с общей памятью
Системы с распределенной памятью
Гибридные системы
![Page 12: Вебинар: Основы распараллеливания С++ программ при помощи OpenMP](https://reader034.vdocuments.pub/reader034/viewer/2022042722/58ad04a91a28ab0b408b4b2b/html5/thumbnails/12.jpg)
Системы с общей памятью• Преимущества:
• Не требуется обмен данными
• Просто писать программы
• Компактность систем
• Недостатки:
• Проблема совместного доступа к памяти
• Проблема синхронности кэшей
• Ограниченный обьем ОЗУ
• Проблема масштабируемости
![Page 13: Вебинар: Основы распараллеливания С++ программ при помощи OpenMP](https://reader034.vdocuments.pub/reader034/viewer/2022042722/58ad04a91a28ab0b408b4b2b/html5/thumbnails/13.jpg)
Системы с распределённой памятью• Преимущества:
• Простота и дешевизна построения
• Эффективное решение задач, требующих малого обмена данными
• Возможность решать задачи, требующие очень больших объёмов оперативной памяти
• Возможность масштабирования
• Недостатки:
• Проблема обмена данными
• Сложное программирование
• Большой размер систем
• Большое энергопотребление
![Page 14: Вебинар: Основы распараллеливания С++ программ при помощи OpenMP](https://reader034.vdocuments.pub/reader034/viewer/2022042722/58ad04a91a28ab0b408b4b2b/html5/thumbnails/14.jpg)
Гибридные системы
![Page 15: Вебинар: Основы распараллеливания С++ программ при помощи OpenMP](https://reader034.vdocuments.pub/reader034/viewer/2022042722/58ad04a91a28ab0b408b4b2b/html5/thumbnails/15.jpg)
Инструментарий
OpenMPOpen Multi-Processing
MPIMessage Passing Interface
Hadoop
Spark
![Page 16: Вебинар: Основы распараллеливания С++ программ при помощи OpenMP](https://reader034.vdocuments.pub/reader034/viewer/2022042722/58ad04a91a28ab0b408b4b2b/html5/thumbnails/16.jpg)
OpenMP
![Page 17: Вебинар: Основы распараллеливания С++ программ при помощи OpenMP](https://reader034.vdocuments.pub/reader034/viewer/2022042722/58ad04a91a28ab0b408b4b2b/html5/thumbnails/17.jpg)
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++
![Page 18: Вебинар: Основы распараллеливания С++ программ при помощи OpenMP](https://reader034.vdocuments.pub/reader034/viewer/2022042722/58ad04a91a28ab0b408b4b2b/html5/thumbnails/18.jpg)
Преимущества OpenMP• Лёгкость использования.
• Кросс-платформенность для систем с общей памятью.
• Сокрытие низкоуровневых операций.
• Инкрементное распараллеливание.
• Поддержка параллельной и последовательной версий программ.
![Page 19: Вебинар: Основы распараллеливания С++ программ при помощи OpenMP](https://reader034.vdocuments.pub/reader034/viewer/2022042722/58ad04a91a28ab0b408b4b2b/html5/thumbnails/19.jpg)
Компоненты• Переменные окружения.
• Директивы компилятора — расширения языков С/C++ и Fortran.
• Функции.
![Page 20: Вебинар: Основы распараллеливания С++ программ при помощи OpenMP](https://reader034.vdocuments.pub/reader034/viewer/2022042722/58ad04a91a28ab0b408b4b2b/html5/thumbnails/20.jpg)
Модель Fork-Join
master thread
master thread
master thread
F FJ J
![Page 21: Вебинар: Основы распараллеливания С++ программ при помощи OpenMP](https://reader034.vdocuments.pub/reader034/viewer/2022042722/58ad04a91a28ab0b408b4b2b/html5/thumbnails/21.jpg)
OpenMP и GCCGCC v4.1
-openmp
g++ test.cpp -o test -fopenmp
#include<omp.h>
![Page 22: Вебинар: Основы распараллеливания С++ программ при помощи OpenMP](https://reader034.vdocuments.pub/reader034/viewer/2022042722/58ad04a91a28ab0b408b4b2b/html5/thumbnails/22.jpg)
Переменные окружения• OMP_NUM_THREADS - Устанавливает количество потоков в параллельном блоке. По умолчанию, количество потоков равно количеству виртуальных процессоров.
• OMP_SCHEDULE - Устанавливает тип распределения работ в параллельных циклах с типом runtime.
• OMP_DYNAMIC - Разрешает или запрещает динамическое изменение количества потоков, которые реально используются для вычислений (в зависимости от загрузки системы). Значение по умолчанию зависит от реализации.
• OMP_NESTED - Разрешает или запрещает вложенный параллелизм (распараллеливание вложенных циклов). По умолчанию – запрещено.
![Page 23: Вебинар: Основы распараллеливания С++ программ при помощи OpenMP](https://reader034.vdocuments.pub/reader034/viewer/2022042722/58ad04a91a28ab0b408b4b2b/html5/thumbnails/23.jpg)
ДирективыФормат директивы (С/C ++)
#pragma omp < имя> [ <предложение> {[,] <предложение>}]
имя — имя директивы;
предложение — конструкция, задающая дополнительную информацию и зависящая от директивы;
![Page 24: Вебинар: Основы распараллеливания С++ программ при помощи OpenMP](https://reader034.vdocuments.pub/reader034/viewer/2022042722/58ad04a91a28ab0b408b4b2b/html5/thumbnails/24.jpg)
Директива parallel#pragma omp parallel [<предложение>]
<структурный блок>
• Поток, встречающий конструкцию parallel, создаёт команду потоков, становясь для неё основным.
• Потокам команды присваиваются уникальные целые номера, начиная с 0 (основной поток).
• Каждый поток исполняет код, определяемый структурным блоком, в конце которого неявно устанавливается барьер.
![Page 25: Вебинар: Основы распараллеливания С++ программ при помощи OpenMP](https://reader034.vdocuments.pub/reader034/viewer/2022042722/58ad04a91a28ab0b408b4b2b/html5/thumbnails/25.jpg)
Директива parallel#include <iostream>
#include <omp.h>
int main()
{
#pragma omp parallel
std::cout << "Hello, world!" << std::endl;
}
![Page 26: Вебинар: Основы распараллеливания С++ программ при помощи OpenMP](https://reader034.vdocuments.pub/reader034/viewer/2022042722/58ad04a91a28ab0b408b4b2b/html5/thumbnails/26.jpg)
Директива for#pragma omp for [<педложения>]
<циклы for>
Ограничения:
• (Единственный) счётчик — целого типа, указатель, или итератор произвольного доступа. Должен изменяться только в заголовке цикла.
• Условие цикла: сравнение переменной с инвариантным к циклу выражением при помощи <, <=, >, >=.
• Изменение счётчика: при помощи ++, --, i += d, i -= d, i = i + d, i = d + i, i = i - d (d — инвариантное к циклу целое выражение)
![Page 27: Вебинар: Основы распараллеливания С++ программ при помощи OpenMP](https://reader034.vdocuments.pub/reader034/viewer/2022042722/58ad04a91a28ab0b408b4b2b/html5/thumbnails/27.jpg)
Директива for#pragma omp parallel
{
#pragma omp for
for (ptrdiff_t i = 0; i < n; i++)
dst[i] = sqrt(src[i]);
}
![Page 28: Вебинар: Основы распараллеливания С++ программ при помощи OpenMP](https://reader034.vdocuments.pub/reader034/viewer/2022042722/58ad04a91a28ab0b408b4b2b/html5/thumbnails/28.jpg)
#pragma omp parallel for#pragma omp parallel for
for (ptrdiff_t i = 0; i < n; i++)
dst[i] = sqrt(src[i]);
![Page 29: Вебинар: Основы распараллеливания С++ программ при помощи OpenMP](https://reader034.vdocuments.pub/reader034/viewer/2022042722/58ad04a91a28ab0b408b4b2b/html5/thumbnails/29.jpg)
Другие директивыsingle - если в параллельной области какой-либо участок кода должен быть выполнен лишь один раз.
sections - используется для задания конечного (неитеративного) параллелизма.
master - выделяет участок кода, который будет выполнен только нитью-мастером.
critical - оформляется критическая секция программы. Критическая секция запрещает одновременное исполнение структурированного блока более чем одним потоком.
barrier - способ синхронизации, дает всем потокам указание ожидать друг друга перед тем, как они продолжат выполнение за барьером.
![Page 30: Вебинар: Основы распараллеливания С++ программ при помощи OpenMP](https://reader034.vdocuments.pub/reader034/viewer/2022042722/58ad04a91a28ab0b408b4b2b/html5/thumbnails/30.jpg)
Список 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
![Page 31: Вебинар: Основы распараллеливания С++ программ при помощи OpenMP](https://reader034.vdocuments.pub/reader034/viewer/2022042722/58ad04a91a28ab0b408b4b2b/html5/thumbnails/31.jpg)
![Page 32: Вебинар: Основы распараллеливания С++ программ при помощи OpenMP](https://reader034.vdocuments.pub/reader034/viewer/2022042722/58ad04a91a28ab0b408b4b2b/html5/thumbnails/32.jpg)
Platform for scientific computing and data management
![Page 33: Вебинар: Основы распараллеливания С++ программ при помощи OpenMP](https://reader034.vdocuments.pub/reader034/viewer/2022042722/58ad04a91a28ab0b408b4b2b/html5/thumbnails/33.jpg)
Какие могут быть задачи?
• Научные расчеты
• Анализ данных
• Рендеринг
• Моделирование
• Прогнозирование
• …
![Page 34: Вебинар: Основы распараллеливания С++ программ при помощи OpenMP](https://reader034.vdocuments.pub/reader034/viewer/2022042722/58ad04a91a28ab0b408b4b2b/html5/thumbnails/34.jpg)
Problems
• Time-consuming deployment and support of the elastic infrastructure.
• Complicated process of connection between the large number of computing tools.
![Page 35: Вебинар: Основы распараллеливания С++ программ при помощи OpenMP](https://reader034.vdocuments.pub/reader034/viewer/2022042722/58ad04a91a28ab0b408b4b2b/html5/thumbnails/35.jpg)
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.
![Page 36: Вебинар: Основы распараллеливания С++ программ при помощи OpenMP](https://reader034.vdocuments.pub/reader034/viewer/2022042722/58ad04a91a28ab0b408b4b2b/html5/thumbnails/36.jpg)
![Page 37: Вебинар: Основы распараллеливания С++ программ при помощи OpenMP](https://reader034.vdocuments.pub/reader034/viewer/2022042722/58ad04a91a28ab0b408b4b2b/html5/thumbnails/37.jpg)
Научный расчет. Как это работает в реальной жизни
![Page 38: Вебинар: Основы распараллеливания С++ программ при помощи OpenMP](https://reader034.vdocuments.pub/reader034/viewer/2022042722/58ad04a91a28ab0b408b4b2b/html5/thumbnails/38.jpg)
Научный расчет. Как это работает у нас
![Page 39: Вебинар: Основы распараллеливания С++ программ при помощи OpenMP](https://reader034.vdocuments.pub/reader034/viewer/2022042722/58ad04a91a28ab0b408b4b2b/html5/thumbnails/39.jpg)
![Page 40: Вебинар: Основы распараллеливания С++ программ при помощи OpenMP](https://reader034.vdocuments.pub/reader034/viewer/2022042722/58ad04a91a28ab0b408b4b2b/html5/thumbnails/40.jpg)
Функционал, который есть сейчас
• загрузка файлов в хранилище;
• запуск вычислительных программ, написаных на С/С++, которые будут выполняться с помощью компилятора GCC с поддержкой OpenMP;
• виртуальные машины облака Azure с количеством ядер от 1 до 32 и ОЗУ до 448 ГБ;
• просмотр и скачивание файлов результатов расчета;
• биллинг, пополнение счета при помощи пластиковых карт и промо-кодов.
![Page 41: Вебинар: Основы распараллеливания С++ программ при помощи OpenMP](https://reader034.vdocuments.pub/reader034/viewer/2022042722/58ad04a91a28ab0b408b4b2b/html5/thumbnails/41.jpg)
Программа бета-тестирования
• Получить бесплатный доступ
• Использовать новые функции первыми
• Помогать сделать FlyElephant лучше
http://flyelephant.net/beta/
![Page 42: Вебинар: Основы распараллеливания С++ программ при помощи OpenMP](https://reader034.vdocuments.pub/reader034/viewer/2022042722/58ad04a91a28ab0b408b4b2b/html5/thumbnails/42.jpg)
Функционал, который ждет нас в скором будущем
• Поддержка Python, R, Java и MPI.
• Система визуализации результатов
• Система управления результатами расчетов
• Внутренняя социальная сеть
• Система API
![Page 43: Вебинар: Основы распараллеливания С++ программ при помощи OpenMP](https://reader034.vdocuments.pub/reader034/viewer/2022042722/58ad04a91a28ab0b408b4b2b/html5/thumbnails/43.jpg)
Отдельный интерфейс для учебного процесса
Поддержка открытых научных исследований
![Page 44: Вебинар: Основы распараллеливания С++ программ при помощи OpenMP](https://reader034.vdocuments.pub/reader034/viewer/2022042722/58ad04a91a28ab0b408b4b2b/html5/thumbnails/44.jpg)