
- •Оглавление
- •Директивы
- •Примеры
- •Примеры
- •Примеры
- •Примеры
- •Примеры
- •Пример
- •Примеры
- •Примеры
- •Примеры
- •Синхронизация
- •Синхронизация
- •Пример
- •Пример
- •Пример
- •Пример
- •Пример
- •Пример
- •Пирмер
- •Пример условной компиляции
- •Вопросы
- •Пример условной компиляции
- •Терминология
- •Терминология
- •Терминология
- •Терминология
- •Терминология
- •Терминология
- •Терминология
- •Терминология
- •Конец

1

Оглавление
Краткийобзорпараллельныхтехнологий
Технологиипараллельногопрограммирования
ЧтожетакоеOpenMP?
ОбзортехнологииOpenMP
Директивы OpenMP
Директиваparallel
Базовыеконструкции
Функциисинхронизации/блокировки
Пример
MPI – технология
ОбзортехнологииMPI
2

Краткийобзорпараллельных технологий
3

Основные подходыкнаписанию параллельныхпрограмм
Проектированиеи |
Распараллеливание |
созданиепараллельной |
уженаписанной |
программыснуля |
программы |
4

Технологиипараллельного программирования
Внастоящеевремясформировались дваподходакпроблемераспараллеливания программ:
1. «Распараллеливание чёрного ящика», когда специальными средствами распараллеливается уже готовая программа;
5

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

ЧтожетакоеOpenMP?
OpenMP(OpenMulti-Processing)— этонабор директивкомпилятора, библиотечных процедурипеременныхокружения,которые предназначеныдляпрограммирования многопоточных приложенийна многопроцессорныхсистемахсобщей памятью(SMP-системах).
1997 – API для
7

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

ОбзортехнологииOpenMP
Интерфейс OpenMP задуман как стандарт параллельного программирования для многопроцессорных систем с общей памятью (SMP, ccNUMA, …)
9

ОбзортехнологииOpenMP
В общем вид системы с общей памятью описываютсяв виде модели параллельного компьютера с произвольным( доступом к памяти )
parallel random-access machine – PRAM
10

ОбзортехнологииOpenMP
Ядро |
Ядро |
Ядро |
Ядро |
Кэш Кэш
Оперативная
память
11

Примерсхемы разбиения программыи архитектура системы.
12

ОбзортехнологииOpenMP
Динамика развития стандарта
OpenMP Fortran API v1.0 (1997)
OpenMP C/C++ API v1.0 (1998)
OpenMP Fortran API v2.0 (2000)
OpenMP C/C++ API v2.0 (2002)
OpenMP C/C++, FortranAPI v2.5 (2005)
OpenMP C/C++, FortranAPI v3.0(2008)
OpenMP C/C++, FortranAPI v3.1(2011)
OpenMP C/C++, FortranAPI v4.0.0 ( 2013)
13

ОбзортехнологииOpenMP
Динамика развития стандарта
Разработкой стандарта занимается организация OpenMP Architecture
Review Board, в которуювошли представители крупнейших компаний - разработчиков SMP-архитектур и программного обеспечения.
14

ОбзортехнологииOpenMP
Основания для достижения эффекта– разделяемые потоками данные располагаются в общей памяти и для организации взаимодействия не требуется операций передачи сообщений.
15

ОбзортехнологииOpenMP
Положительныестороны
распараллеливаниеПоэтапное (инкрементальное) Можно распараллеливать ◦ последовательные программы
поэтапно, не меняя их структуру
16

ОбзортехнологииOpenMP
ПоложительныеЕдинственностьстороныразрабатываемого кода Нет необходимости поддерживать ◦ последовательный и параллельный
вариант программы, поскольку директивы игнорируются обычными компиляторами (в общем случае)
17

ОбзортехнологииOpenMP
Положительныестороны
Эффективность Учет и использование возможностей
◦ систем с общей памятью Переносимость поддержка большим числом
◦ компиляторов под разные платформы
и ОС, стандарт для распространенных языков C/C++, Fortran
18

ОбзортехнологииOpenMP
Недостатки:
ограниченность области применения; имеющиеся средства распараллеливания циклов с зависимостямипо данным являются слишком низкоуровневыми.
19

ОбзортехнологииOpenMP
ПринципыИспользованиеорганизациипараллелизмапотоков (общее
адресное пространство) Пульсирующий (fork-join) параллелизм
20

ОбзортехнологииOpenMP
Принципыорганизации параллелизма
Привыполненииобычногокода (вне параллельныхобластей)программа исполняетсяоднимпотоком (master thread)
Припоявлениидирективы#parallel происходитсоздание“команды” (team) потоков дляпараллельного выполнения вычислений
21

ОбзортехнологииOpenMP
ПринципыПослеорганизациивыходапараллелизмаиз области действия
директивы #parallel происходит синхронизация, все потоки, кроме master, уничтожаются Продолжается последовательное выполнение кода (до очередного появления директивы #parallel)
22

ОбзортехнологииOpenMP
Структура
Заосновуберётсяпоследовательная программа,адлясозданияеё параллельнойверсиипользователю предоставляетсянабор директив, процедурипеременныхокружения.
23

ОбзортехнологииOpenMP
Структура
Набор директив компилятора Библиотека функций Набор переменных окружения
Изложение материала будет проводиться на примереC/C++
24

Директивы OpenMP
Формат записи директив
Формат
Пример
#pragma omp имя_директивы
[clause,…]
#pragma omp parallel default(shared) private(beta,pi)
25

Директивы OpenMP
Формат записи директив
|
|
|
|
|
|
|
|
|
root.cpp |
|
|
|
|
node.cpp |
|
|
#pragma omp |
|
|
|
void TypeThreadNum() { |
||
|
|
|
|||||
|
parallel |
|
|
+ |
|
int num; |
|
|
{ |
|
|
|
num = omp_get_thread_num(); |
||
|
|
|
|
||||
|
TypeThreadNum(); |
|
|
|
#pragma omp critical |
||
|
} |
|
|
|
|
printf("Hello from |
|
|
|
|
|
|
|
%d\n",num); |
|
Статический |
|
|
|
||||
|
|
|
|
} |
|
||
|
|
|
|
|
|||
(лексический) |
|
|
|
|
|
||
|
|
|
|
|
|
||
контекст |
|
|
|
|
|
|
|
параллельной |
|
|
|
|
|
|
|
области |
Динамический |
|
|
Отделяемые (orphaned) |
|||
|
|
|
|
директивы могут |
|||
|
|
контекст |
|
|
|||
|
|
|
|
появляться вне |
|||
|
|
параллельной области |
|||||
|
|
параллельной области |
|||||
|
|
(включает статический |
контекст)
26

Директивы |
Функции |
БазовыеконструкцииOpenMP |
|
Форма записи: |
|
#pragma omp |
omp_get_num_procs, |
<имя_директивы> |
|
private, parallel, for, |
omp_get_num_threads, |
section, sections, |
omp_get_wtime, |
single, master, |
omp_destroy_lock и |
critical, flush, |
другие |
ordered и atomic и |
|
ряд других |
|
27

Директивы OpenMP
Типыдиректив
Определениепараллельнойобласти
Разделениеработы
Синхронизация
28

Базовыеконструкции
ДирективыКонструкция #pragma в языке Си/Си++ используется для задания дополнительных указаний компилятору Использование специальной ключевой директивы «omp»
указывает на то, что команды относятся к OpenMP
29

Базовыеконструкции
Директивы
Такимобразомформатзаписи директивимеетследующийвид:
#pragma omp <директива>[раздел[[,]раздел]...]
30

Директивы OpenMP
Определение параллельной области
Директива parallel (основная директива OpenMP)
Когда основной потоквыполнения достигает директиву parallel, создается набор (team) потоков; входной поток является основным потокомэтого набора (master thread) и имеет номер 0
31

Директивы OpenMP
Определение параллельной области
Код области дублируется или разделяется между потоками для параллельного выполнения В конце области обеспечивается
синхронизация потоков – выполняется ожидание завершения вычислений всех потоков; далее все потоки завершаются – дальнейшие вычисления продолжает выполнять только основной поток
32