Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лекция по ПП 3.pdf
Скачиваний:
13
Добавлен:
02.06.2015
Размер:
4.72 Mб
Скачать

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