Лекция 2: OpenMP - модель параллелизма по управлению

Содержание

Слайд 2

Москва, 2010 г.

Параллельное программирование с OpenMP: OpenMP - модель параллелизма по управлению

Москва, 2010 г. Параллельное программирование с OpenMP: OpenMP - модель параллелизма по
© Бахтин В.А.

из 34

Содержание

Выполнение OpenMP-программы (Fork and Join Model).
Модель памяти. Понятие консистентности памяти.
Консистентность памяти в OpenMP (weak ordering).
Классы переменных (клаузы SHARED, PRIVATE; директива THREADPRIVATE).

Слайд 3

END PARALLEL

PARALLEL

END PARALLEL

PARALLEL

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

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

END PARALLEL PARALLEL END PARALLEL PARALLEL Выполнение OpenMP-программы Fork-Join параллелизм: Главная (master)
по мере небходимости.
Параллелизм добавляется инкрементально.

END PARALLEL

PARALLEL

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

Параллельное программирование с OpenMP: OpenMP - модель параллелизма по управлению © Бахтин В.А.

из 34

Москва, 2010 г.

Слайд 4

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

Параллельное программирование с OpenMP: OpenMP - модель параллелизма по

Когерентность и консистентность памяти Параллельное программирование с OpenMP: OpenMP - модель параллелизма
управлению © Бахтин В.А.

из 34

Москва, 2010 г.

Слайд 5

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

http://www.sgi.com/products/servers/altix/numalink.html

Параллельное программирование с OpenMP: OpenMP - модель параллелизма по управлению

Сеть передачи данных http://www.sgi.com/products/servers/altix/numalink.html Параллельное программирование с OpenMP: OpenMP - модель параллелизма
© Бахтин В.А.

из 34

Москва, 2010 г.

Слайд 6

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

из 34

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

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

Параллельное программирование с OpenMP: OpenMP - модель параллелизма по управлению © Бахтин В.А.

Москва, 2010 г.

Слайд 7

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

из 34

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

Строгая консистентность из 34 Операция чтения ячейки памяти с адресом X должна
значение, записанное самой последней операцией записи с адресом X, называется моделью строгой консистентности.
a) строгая консистентность
б) нестрогая консистентность

Параллельное программирование с OpenMP: OpenMP - модель параллелизма по управлению © Бахтин В.А.

Москва, 2010 г.

Слайд 8

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

из 34

Впервые определил Lamport в 1979 г. в контексте совместно

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

Параллельное программирование с OpenMP: OpenMP - модель параллелизма по управлению © Бахтин В.А.

Москва, 2010 г.

Слайд 9

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

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

из 34

Параллельное программирование

а) удовлетворяет последовательной консистентности б) не удовлетворяет последовательной консистентности Последовательная консистентность из
с OpenMP: OpenMP - модель параллелизма по управлению © Бахтин В.А.

Москва, 2010 г.

Слайд 10

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

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

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

из 34

Параллельное программирование с OpenMP: OpenMP - модель параллелизма по управлению © Бахтин В.А.

Москва, 2010 г.

Слайд 11

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

из 34

Предположим, что процесс P1 модифицировал переменную x, затем процесс

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

Параллельное программирование с OpenMP: OpenMP - модель параллелизма по управлению © Бахтин В.А.

Москва, 2010 г.

Слайд 12

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

из 34

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

Корректная последовательность для модели причинной

Причинная консистентность из 34 Нарушение модели причинной консистентности Корректная последовательность для модели
консистентности

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

Параллельное программирование с OpenMP: OpenMP - модель параллелизма по управлению © Бахтин В.А.

Москва, 2010 г.

Слайд 13

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

из 34

PRAM: Операции записи, выполняемые одним

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

Параллельное программирование с OpenMP: OpenMP - модель параллелизма по управлению © Бахтин В.А.

Москва, 2010 г.

Слайд 14

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

из 34

Пусть процесс в критической секции циклически читает

Слабая консистентность (weak consistency) из 34 Пусть процесс в критической секции циклически
и записывает значение некоторых переменных. Даже, если остальные процессоры и не пытаются обращаться к этим переменным до выхода первого процесса из критической секции, для удовлетворения требований рассматриваемых ранее моделей консистентности они должны видеть все записи первого процессора в порядке их выполнения, что, естественно, совершенно не нужно.
Наилучшее решение в такой ситуации - это позволить первому процессу завершить выполнение критической секции и, только после этого, переслать остальным процессам значения модифицированных переменных, не заботясь о пересылке промежуточных результатов.
Модель слабой консистентности, основана на выделении среди переменных специальных синхронизационных переменных и описывается следующими правилами:
Доступ к синхронизационным переменным определяется моделью последовательной консистентности;
Доступ к синхронизационным переменным запрещен (задерживается), пока не выполнены все предыдущие операции записи;
Доступ к данным (запись, чтение) запрещен, пока не выполнены все предыдущие обращения к синхронизационным переменным.

Параллельное программирование с OpenMP: OpenMP - модель параллелизма по управлению © Бахтин В.А.

Москва, 2010 г.

Слайд 15

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

из 34

Первое правило определяет, что все процессы видят

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

Параллельное программирование с OpenMP: OpenMP - модель параллелизма по управлению © Бахтин В.А.

Москва, 2010 г.

Слайд 16

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

из 34

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

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

Параллельное программирование с

Слабая консистентность (weak consistency) из 34 Допустимая последователь- ность событий Недопустимая последовательность
OpenMP: OpenMP - модель параллелизма по управлению © Бахтин В.А.

Москва, 2010 г.

Слайд 17

Консистентность по выходу

из 34

В системе со слабой консистентностью возникает проблема при

Консистентность по выходу из 34 В системе со слабой консистентностью возникает проблема
обращении к синхронизационной переменной: система не имеет информации о цели этого обращения - или процесс завершил модификацию общей переменной, или готовится прочитать значение общей переменной.
Для более эффективной реализации модели консистентности система должна различать две ситуации: вход в критическую секцию и выход из нее.
В модели консистентности по выходу введены специальные функции обращения к синхронизационным переменным:
ACQUIRE - захват синхронизационной переменной, информирует систему о входе в критическую секцию;
RELEASE - освобождение синхронизационной переменной, определяет завершение критической секции.

Параллельное программирование с OpenMP: OpenMP - модель параллелизма по управлению © Бахтин В.А.

Москва, 2010 г.

Слайд 18

Консистентность по выходу

из 34

Следующие правила определяют требования к модели консистентности по

Консистентность по выходу из 34 Следующие правила определяют требования к модели консистентности
выходу:
До выполнения обращения к общей переменной, должны быть полностью выполнены все предыдущие захваты синхронизационных переменных данным процессором.
Перед освобождением синхронизационной переменной должны быть закончены все операции чтения/записи, выполнявшиеся процессором прежде.
Реализация операций захвата и освобождения синхронизационной переменной должны удовлетворять требованиям процессорной консистентности (последовательная консистентность не требуется).

Параллельное программирование с OpenMP: OpenMP - модель параллелизма по управлению © Бахтин В.А.

Москва, 2010 г.

Слайд 19

001

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

из 34

Нить

Кэш общих переменных

Общая память

Private-переменные

Threadprivate-переменные

001

Нить

Кэш общих переменных

Private-переменные

Threadprivate-переменные

001

Нить

Кэш общих

001 Модель памяти в OpenMP из 34 Нить Кэш общих переменных Общая
переменных

Private-переменные

Threadprivate-переменные

Параллельное программирование с OpenMP: OpenMP - модель параллелизма по управлению © Бахтин В.А.

Москва, 2010 г.

Слайд 20

001

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

из 34

Нить 0

Общая память

001

Нить 1

static int i =

001 Модель памяти в OpenMP из 34 Нить 0 Общая память 001
0;

… = i + 1;

i = i + 1;

i = 0

i = 1

… = i + 2; // ?

#pragma omp flush (i)

#pragma omp flush (i)

i = 1

i = 1

Параллельное программирование с OpenMP: OpenMP - модель параллелизма по управлению © Бахтин В.А.

Москва, 2010 г.

Слайд 21

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

из 34

Корректная последовательность работы нитей с переменной:
Нить0 записывает

Консистентность памяти в OpenMP из 34 Корректная последовательность работы нитей с переменной:
значение переменной - write(var)
Нить0 выполняет операцию синхронизации – flush (var)
Нить1 выполняет операцию синхронизации – flush (var)
Нить1 читает значение переменной – read (var)
Директива flush:
#pragma omp flush [(list)] - для Си
!$omp flush [(list)] - для Фортран

Параллельное программирование с OpenMP: OpenMP - модель параллелизма по управлению © Бахтин В.А.

Москва, 2010 г.

Слайд 22

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

из 34

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

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

Параллельное программирование с OpenMP: OpenMP - модель параллелизма по управлению © Бахтин В.А.

Москва, 2010 г.

Слайд 23

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

из 34

#pragma omp flush [(список переменных)]
По умолчанию все

Консистентность памяти в OpenMP из 34 #pragma omp flush [(список переменных)] По
переменные приводятся в консистентное состояние (#pragma omp flush):
при барьерной синхронизации;
при входе и выходе из конструкций parallel, critical и ordered;
при выходе из конструкций распределения работ (for, single, sections, workshare), если не указана клауза nowait;
при вызове omp_set_lock и omp_unset_lock;
при вызове omp_test_lock, omp_set_nest_lock, omp_unset_nest_lock и omp_test_nest_lock, если изменилось состояние семафора.
При входе и выходе из конструкции atomic выполняется #pragma omp flush(x), где x – переменная, изменяемая в конструкции atomic.

Параллельное программирование с OpenMP: OpenMP - модель параллелизма по управлению © Бахтин В.А.

Москва, 2010 г.

Слайд 24

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

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

Классы переменных В модели программирования с разделяемой памятью: Большинство переменных по умолчанию
SHARED
Глобальные переменные совместно используются всеми нитями (shared)
Фортран: COMMON блоки, SAVE переменные, MODULE переменные
Си: file scope, static
Динамически выделяемая память (ALLOCATE, malloc, new)
Но не все переменные являются разделяемыми ...
Стековые переменные в подпрограммах (функциях), вызываемых из параллельного региона, являются PRIVATE.
Переменные, объявленные внутри блока операторов параллельного региона являются приватными.
Счетчики циклов, витки которых распределяются между нитями при помощи конструкций FOR и PARALLEL FOR.

Параллельное программирование с OpenMP: OpenMP - модель параллелизма по управлению © Бахтин В.А.

из 34

Москва, 2010 г.

Слайд 25

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

double Array1[100];
int main() {
int Array2[100];
#pragma omp parallel
{ int iam

Классы переменных double Array1[100]; int main() { int Array2[100]; #pragma omp parallel
= omp_get_thread_num();
work(Array2, iam);
printf(“%d\n”, Array2[0]);
}
}

Параллельное программирование с OpenMP: OpenMP - модель параллелизма по управлению © Бахтин В.А.

из 34

extern double Array1[100];
void work(int *Array, int iam) {
double TempArray[100];
static int count;
...
}

END PARALLEL

PARALLEL

TempArray,iam

TempArray,iam

TempArray, iam

Array1, Array2, count

Array1, Array2, count

Москва, 2010 г.

Слайд 26

Можно изменить класс переменной при помощи конструкций:
SHARED (список переменных)
PRIVATE (список переменных)
FIRSTPRIVATE (список

Можно изменить класс переменной при помощи конструкций: SHARED (список переменных) PRIVATE (список
переменных)
LASTPRIVATE (список переменных)
THREADPRIVATE (список переменных)
DEFAULT (PRIVATE | SHARED | NONE)

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

Параллельное программирование с OpenMP: OpenMP - модель параллелизма по управлению © Бахтин В.А.

из 34

Москва, 2010 г.

Слайд 27

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

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

Конструкция PRIVATE Конструкция «private(var)» создает локальную копию переменной «var» в каждой из
переменной не инициализировано
Приватная копия не связана с оригинальной переменной
В OpenMP 2.5 значение переменной «var» не определено после завершения параллельной конструкции
#pragma omp parallel for private (i,j,sum)
for (i=0; i< m; i++)
{
sum = 0.0;
for (j=0; j< n; j++)
sum +=b[i][j]*c[j];
a[i] = sum;
}

из 34

Параллельное программирование с OpenMP: OpenMP - модель параллелизма по управлению © Бахтин В.А.

Москва, 2010 г.

Слайд 28

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

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

Конструкция FIRSTPRIVATE «firstprivate» является специальным случаем «private». Инициализирует каждую приватную копию соответствующим
главной (master) нити.
BOOL FirstTime=TRUE;
#pragma omp parallel for firstprivate(FirstTime)
for (row=0; row{
if (FirstTime == TRUE) { FirstTime = FALSE; FirstWork (row); }
AnotherWork (row);
}

из 34

Параллельное программирование с OpenMP: OpenMP - модель параллелизма по управлению © Бахтин В.А.

Москва, 2010 г.

Слайд 29

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

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

Конструкция LASTPRIVATE lastprivate передает значение приватной переменной, посчитанной на последней итерации в
переменную.

из 34

Параллельное программирование с OpenMP: OpenMP - модель параллелизма по управлению © Бахтин В.А.

Москва, 2010 г.

int i;
#pragma omp parallel
{
#pragma omp for lastprivate(i)
for (i=0; i a[i] = b[i] + b[i+1];
}
a[i]=b[i]; /*i == n-1*/

Слайд 30

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

Отличается от применения конструкции PRIVATE:
с PRIVATE глобальные переменные маскируются
THREADPRIVATE сохраняют

Конструкция THREADPRIVATE Отличается от применения конструкции PRIVATE: с PRIVATE глобальные переменные маскируются
глобальную область видимости внутри каждой нити
#pragma omp threadprivate (Var)

END PARALLEL

PARALLEL

END PARALLEL

PARALLEL

Var = 1

Var = 2

… = Var

… = Var

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

из 34

Параллельное программирование с OpenMP: OpenMP - модель параллелизма по управлению © Бахтин В.А.

Москва, 2010 г.

Слайд 31

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

Меняет класс переменной по умолчанию:
DEFAULT (SHARED) – действует по умолчанию
DEFAULT (PRIVATE)

Конструкция DEFAULT Меняет класс переменной по умолчанию: DEFAULT (SHARED) – действует по
– есть только в Fortran
DEFAULT (NONE) – требует определить класс для каждой переменной

itotal = 100
#pragma omp parallel private(np,each)
{
np = omp_get_num_threads()
each = itotal/np
………
}

itotal = 100
#pragma omp parallel default(none) private(np,each) shared (itotal)
{
np = omp_get_num_threads()
each = itotal/np
………
}

Москва, 2010 г.

Параллельное программирование с OpenMP: OpenMP - модель параллелизма по управлению © Бахтин В.А.

из 34

Слайд 32

из 34

Литература…

http://www.openmp.org
Распределенные системы. Принципы и парадигмы. / Э. Таненбаум, М.

из 34 Литература… http://www.openmp.org Распределенные системы. Принципы и парадигмы. / Э. Таненбаум,
ван Стеен. – СПб. Питер, 2003
Операционные системы распределенных вычислительных систем (распределенные ОС). Крюков Виктор Алексеевич. http://parallel.ru/krukov/index.html

Параллельное программирование с OpenMP: OpenMP - модель параллелизма по управлению © Бахтин В.А.

Москва, 2010 г.

Слайд 33

из 34

Вопросы?
Вопросы?

Параллельное программирование с OpenMP: OpenMP - модель параллелизма по управлению

из 34 Вопросы? Вопросы? Параллельное программирование с OpenMP: OpenMP - модель параллелизма
© Бахтин В.А.

Москва, 2010 г.

Имя файла: Лекция-2:-OpenMP---модель-параллелизма-по-управлению.pptx
Количество просмотров: 133
Количество скачиваний: 0