🗊 Презентация Параллельное программирование с использованием OpenMP. Лекция 1

Нажмите для полного просмотра!
Параллельное программирование с использованием OpenMP. Лекция 1, слайд №1 Параллельное программирование с использованием OpenMP. Лекция 1, слайд №2 Параллельное программирование с использованием OpenMP. Лекция 1, слайд №3 Параллельное программирование с использованием OpenMP. Лекция 1, слайд №4 Параллельное программирование с использованием OpenMP. Лекция 1, слайд №5 Параллельное программирование с использованием OpenMP. Лекция 1, слайд №6 Параллельное программирование с использованием OpenMP. Лекция 1, слайд №7 Параллельное программирование с использованием OpenMP. Лекция 1, слайд №8 Параллельное программирование с использованием OpenMP. Лекция 1, слайд №9 Параллельное программирование с использованием OpenMP. Лекция 1, слайд №10 Параллельное программирование с использованием OpenMP. Лекция 1, слайд №11 Параллельное программирование с использованием OpenMP. Лекция 1, слайд №12 Параллельное программирование с использованием OpenMP. Лекция 1, слайд №13 Параллельное программирование с использованием OpenMP. Лекция 1, слайд №14 Параллельное программирование с использованием OpenMP. Лекция 1, слайд №15 Параллельное программирование с использованием OpenMP. Лекция 1, слайд №16 Параллельное программирование с использованием OpenMP. Лекция 1, слайд №17 Параллельное программирование с использованием OpenMP. Лекция 1, слайд №18 Параллельное программирование с использованием OpenMP. Лекция 1, слайд №19 Параллельное программирование с использованием OpenMP. Лекция 1, слайд №20 Параллельное программирование с использованием OpenMP. Лекция 1, слайд №21 Параллельное программирование с использованием OpenMP. Лекция 1, слайд №22 Параллельное программирование с использованием OpenMP. Лекция 1, слайд №23 Параллельное программирование с использованием OpenMP. Лекция 1, слайд №24 Параллельное программирование с использованием OpenMP. Лекция 1, слайд №25 Параллельное программирование с использованием OpenMP. Лекция 1, слайд №26 Параллельное программирование с использованием OpenMP. Лекция 1, слайд №27 Параллельное программирование с использованием OpenMP. Лекция 1, слайд №28 Параллельное программирование с использованием OpenMP. Лекция 1, слайд №29 Параллельное программирование с использованием OpenMP. Лекция 1, слайд №30 Параллельное программирование с использованием OpenMP. Лекция 1, слайд №31 Параллельное программирование с использованием OpenMP. Лекция 1, слайд №32 Параллельное программирование с использованием OpenMP. Лекция 1, слайд №33 Параллельное программирование с использованием OpenMP. Лекция 1, слайд №34 Параллельное программирование с использованием OpenMP. Лекция 1, слайд №35 Параллельное программирование с использованием OpenMP. Лекция 1, слайд №36 Параллельное программирование с использованием OpenMP. Лекция 1, слайд №37 Параллельное программирование с использованием OpenMP. Лекция 1, слайд №38 Параллельное программирование с использованием OpenMP. Лекция 1, слайд №39 Параллельное программирование с использованием OpenMP. Лекция 1, слайд №40 Параллельное программирование с использованием OpenMP. Лекция 1, слайд №41 Параллельное программирование с использованием OpenMP. Лекция 1, слайд №42 Параллельное программирование с использованием OpenMP. Лекция 1, слайд №43 Параллельное программирование с использованием OpenMP. Лекция 1, слайд №44

Содержание

Вы можете ознакомиться и скачать презентацию на тему Параллельное программирование с использованием OpenMP. Лекция 1. Доклад-сообщение содержит 44 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

Слайды и текст этой презентации


Слайд 1


Параллельное программирование с использованием OpenMP. Лекция 1, слайд №1
Описание слайда:

Слайд 2


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

Слайд 3


ОСНОВЫ ПОДХОДА
Описание слайда:
ОСНОВЫ ПОДХОДА

Слайд 4


Технология OpenMP для систем с общей памятью Технология OpenMP задумана как стандарт параллельного программирования для многопроцессорных систем с...
Описание слайда:
Технология OpenMP для систем с общей памятью Технология OpenMP задумана как стандарт параллельного программирования для многопроцессорных систем с общей памятью (SMP, ccNUMA, …). Системы с общей памятью описываются в виде модели параллельного компьютера с произвольным доступом к памяти (parallel random-access machine – PRAM).

Слайд 5


Способы разработки программ для параллельных вычислений… Способ 1: автоматическое распараллеливание последовательных программ. возможности...
Описание слайда:
Способы разработки программ для параллельных вычислений… Способ 1: автоматическое распараллеливание последовательных программ. возможности автоматического построения параллельных программ ограничены. Способ 2: расширение существующих алгоритмических языков средствами параллельного программирования. Способ 3: использование новых алгоритмических языков параллельного программирования. Примечание: Способы 2-3 приводят к необходимости значительной переработки существующего программного обеспечения. .

Слайд 6


Способы разработки программ для параллельных вычислений… Способ 4: использование тех или иных внеязыковых средств языка программирования. Примеры...
Описание слайда:
Способы разработки программ для параллельных вычислений… Способ 4: использование тех или иных внеязыковых средств языка программирования. Примеры средств – директивы или комментарии, которые обрабатываются специальным препроцессором до начала компиляции программы. Директивы дают указания на возможные способы распараллеливания программы, при этом исходный текст программы остается неизменным. Препроцессор заменяет директивы параллелизма на дополнительный программный код (как правило, в виде обращений к процедурам параллельной библиотеки). При отсутствии препроцессора компилятор построит исходный последовательный программный код.

Слайд 7


Способы разработки программ для параллельных вычислений Способ 4: Положительные стороны: Снижает потребность переработки существующего программного...
Описание слайда:
Способы разработки программ для параллельных вычислений Способ 4: Положительные стороны: Снижает потребность переработки существующего программного кода. Обеспечивает единство программного кода для последовательных и параллельных вычислений, что снижает сложность развития и сопровождения программ. Позволяет осуществлять поэтапную (инкрементную) разработку параллельных программ. Именно этот подход и является основой технологии OpenMP

Слайд 8


Принципы организации параллелизма… Использование потоков (общее адресное пространство). «Пульсирующий» (fork-join) параллелизм. *Источник:
Описание слайда:
Принципы организации параллелизма… Использование потоков (общее адресное пространство). «Пульсирующий» (fork-join) параллелизм. *Источник:

Слайд 9


Принципы организации параллелизма При выполнении обычного кода (вне параллельных областей) программа исполняется одним потоком (master thread). При...
Описание слайда:
Принципы организации параллелизма При выполнении обычного кода (вне параллельных областей) программа исполняется одним потоком (master thread). При появлении директивы parallel происходит создание “команды” (team) потоков для параллельного выполнения вычислений. После выхода из области действия директивы parallel происходит синхронизация, все потоки, кроме master, уничтожаются (или приостанавливаются). Продолжается последовательное выполнение кода (до очередного появления директивы parallel).

Слайд 10


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

Слайд 11


Директивы openmp Формат, области видимости, типы. Директива определения параллельной области.
Описание слайда:
Директивы openmp Формат, области видимости, типы. Директива определения параллельной области.

Слайд 12


Формат записи директив… Формат: #pragma omp имя_директивы [параметр,…] Пример: #pragma omp parallel default(shared) private(beta,pi) Примечание: На...
Описание слайда:
Формат записи директив… Формат: #pragma omp имя_директивы [параметр,…] Пример: #pragma omp parallel default(shared) private(beta,pi) Примечание: На английском языке для термина «параметр» используется обозначение «clause».

Слайд 13


Области видимости директив
Описание слайда:
Области видимости директив

Слайд 14


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

Слайд 15


Определение параллельной области Директива parallel (основная директива OpenMP): Когда основной поток выполнения достигает директиву parallel ,...
Описание слайда:
Определение параллельной области Директива parallel (основная директива OpenMP): Когда основной поток выполнения достигает директиву parallel , создается набор (team) потоков. Входной поток является основным потоком (master thread) этого набора и имеет номер 0. Код области дублируется или разделяется между потоками для параллельного выполнения. В конце области обеспечивается синхронизация потоков – выполняется ожидание завершения вычислений всех потоков. Далее все потоки завершаются, и последующие вычисления продолжает выполнять только основной поток.

Слайд 16


Формат директивы Формат директивы parallel : #pragma omp parallel [clause ...] structured_block Возможные параметры (clauses): if (scalar_expression)...
Описание слайда:
Формат директивы Формат директивы parallel : #pragma omp parallel [clause ...] structured_block Возможные параметры (clauses): if (scalar_expression) private (list) firstprivate (list) default (shared | none) shared (list) copyin (list) reduction (operator: list) num_threads(integer-expression)

Слайд 17


Пример использования директивы… #include void main() { int nthreads, tid; // Создание параллельной области #pragma omp parallel private(tid) { //...
Описание слайда:
Пример использования директивы… #include void main() { int nthreads, tid; // Создание параллельной области #pragma omp parallel private(tid) { // печать номера потока tid = omp_get_thread_num(); printf("Hello World from thread = %d\n", tid); // Печать количества потоков – только master if (tid == 0) { nthreads = omp_get_num_threads(); printf("Number of threads = %d\n", nthreads); } } // Завершение параллельной области }

Слайд 18


Пример использования директивы Hello World from thread = 1 Hello World from thread = 3 Hello World from thread = 0 Hello World from thread = 2
Описание слайда:
Пример использования директивы Hello World from thread = 1 Hello World from thread = 3 Hello World from thread = 0 Hello World from thread = 2

Слайд 19


Установка количества потоков Способы задания (по убыванию старшинства) Параметр директивы: num_threads(N) Функция установки числа потоков:...
Описание слайда:
Установка количества потоков Способы задания (по убыванию старшинства) Параметр директивы: num_threads(N) Функция установки числа потоков: omp_set_num_threads(N) Переменная окружения: OMP_NUM_THREADS Число, равное количеству процессоров, которое “видит” операционная система.

Слайд 20


Определение времени выполнения параллельной программы double t1, t2, dt; t1 = omp_get_wtime (); … t2 = omp_get_wtime (); dt = t2 – t1;
Описание слайда:
Определение времени выполнения параллельной программы double t1, t2, dt; t1 = omp_get_wtime (); … t2 = omp_get_wtime (); dt = t2 – t1;

Слайд 21


Директивы openmp
Описание слайда:
Директивы openmp

Слайд 22


Директивы управления областью видимости Управление областью видимости обеспечивается при помощи параметров (clauses) директив: shared, default...
Описание слайда:
Директивы управления областью видимости Управление областью видимости обеспечивается при помощи параметров (clauses) директив: shared, default private firstprivate lastprivate reduction, copyin. Параметры директив определяют, какие соотношения существуют между переменными последовательных и параллельных фрагментов выполняемой программы.

Слайд 23


Параметр shared Параметр shared определяет список переменных, которые будут общими для всех потоков параллельной области. #pragma omp parallel...
Описание слайда:
Параметр shared Параметр shared определяет список переменных, которые будут общими для всех потоков параллельной области. #pragma omp parallel shared(list) Примечание: правильность использования таких переменных должна обеспечиваться программистом.

Слайд 24


Параметр private Параметр private определяет список переменных, которые будут локальными для каждого потока. #pragma omp parallel private(list)...
Описание слайда:
Параметр private Параметр private определяет список переменных, которые будут локальными для каждого потока. #pragma omp parallel private(list) Переменные создаются в момент формирования потоков параллельной области. Начальное значение переменных является неопределенным.

Слайд 25


Пример использования директивы private #include void main () { int nthreads, tid; // Создание параллельной области #pragma omp parallel private(tid)...
Описание слайда:
Пример использования директивы private #include void main () { int nthreads, tid; // Создание параллельной области #pragma omp parallel private(tid) { // печать номера потока tid = omp_get_thread_num(); printf("Hello World from thread = %d\n", tid); // Печать количества потоков – только master if (tid == 0) { nthreads = omp_get_num_threads(); printf("Number of threads = %d\n", nthreads); } } // Завершение параллельной области }

Слайд 26


Параметр firstprivate Параметр firstprivate позволяет создать локальные переменные потоков, которые перед использованием инициализируются значениями...
Описание слайда:
Параметр firstprivate Параметр firstprivate позволяет создать локальные переменные потоков, которые перед использованием инициализируются значениями исходных переменных. #pragma omp parallel firstprivate(list)

Слайд 27


Параметр lastprivate Параметр lastprivate позволяет создать локальные переменные потоков, значения которых запоминаются в исходных переменных после...
Описание слайда:
Параметр lastprivate Параметр lastprivate позволяет создать локальные переменные потоков, значения которых запоминаются в исходных переменных после завершения параллельной области (используются значения потока, выполнившего последнюю итерацию цикла или последнюю секцию). #pragma omp parallel lastprivate(list)

Слайд 28


Директивы openmp
Описание слайда:
Директивы openmp

Слайд 29


Директивы распределения вычислений между потоками Существует 3 директивы для распределения вычислений в параллельной области: for – распараллеливание...
Описание слайда:
Директивы распределения вычислений между потоками Существует 3 директивы для распределения вычислений в параллельной области: for – распараллеливание циклов. sections – распараллеливание раздельных фрагментов кода (функциональное распараллеливание). single – директива для указания последовательного выполнения кода. Начало выполнения директив по умолчанию не синхронизируется. Завершение директив по умолчанию является синхронным.

Слайд 30


Директива for Формат директивы for: #pragma omp for [clause ...] for loop Возможные параметры (clause): private(list) firstprivate(list)...
Описание слайда:
Директива for Формат директивы for: #pragma omp for [clause ...] for loop Возможные параметры (clause): private(list) firstprivate(list) lastprivate(list) schedule(kind[, chunk_size]) reduction(operator: list) ordered nowait

Слайд 31


Пример использования директивы for #include #define CHUNK 100 #define NMAX 1000 void main() { int i, n, chunk; float a[NMAX], b[NMAX], c[NMAX]; for...
Описание слайда:
Пример использования директивы for #include #define CHUNK 100 #define NMAX 1000 void main() { int i, n, chunk; float a[NMAX], b[NMAX], c[NMAX]; for (i=0; i < NMAX; i++) a[i] = b[i] = i * 1.0; n = NMAX; chunk = CHUNK; #pragma omp parallel shared(a,b,c,n,chunk) private(i) { #pragma omp for for (i=0; i < n; i++) c[i] = a[i] + b[i]; } // end of parallel section }

Слайд 32


Директива for. Параметр schedule static – итерации делятся на блоки по chunk итераций и статически разделяются между потоками. Если параметр chunk не...
Описание слайда:
Директива for. Параметр schedule static – итерации делятся на блоки по chunk итераций и статически разделяются между потоками. Если параметр chunk не определен, итерации делятся между потоками равномерно и непрерывно. dynamic – распределение итерационных блоков осуществляется динамически (по умолчанию chunk=1). guided – размер итерационного блока уменьшается экспоненциально при каждом распределении. chunk определяет минимальный размер блока (по умолчанию chunk=1). runtime – правило распределения определяется переменной OMP_SCHEDULE (при использовании runtime параметр chunk задаваться не должен).

Слайд 33


Пример использования директивы for #include #define CHUNK 100 #define NMAX 1000 void main() { int i, n, chunk; float a[NMAX], b[NMAX], c[NMAX]; for...
Описание слайда:
Пример использования директивы for #include #define CHUNK 100 #define NMAX 1000 void main() { int i, n, chunk; float a[NMAX], b[NMAX], c[NMAX]; for (i=0; i < NMAX; i++) a[i] = b[i] = i * 1.0; n = NMAX; chunk = CHUNK; #pragma omp parallel shared(a,b,c,n,chunk) private(i) { #pragma omp for schedule(dynamic,chunk) for (i=0; i < n; i++) c[i] = a[i] + b[i]; } // end of parallel section }

Слайд 34


Директива sections… Формат директивы sections: #pragma omp sections [clause ...] { #pragma omp section // несколько секций structured_block }...
Описание слайда:
Директива sections… Формат директивы sections: #pragma omp sections [clause ...] { #pragma omp section // несколько секций structured_block } Возможные параметры (clause): private(list), firstprivate(list), lastprivate(list), reduction(operator: list), nowait

Слайд 35


Директива sections Директива sections – распределение вычислений для раздельных фрагментов кода. Фрагменты кода: Выделяются при помощи директивы...
Описание слайда:
Директива sections Директива sections – распределение вычислений для раздельных фрагментов кода. Фрагменты кода: Выделяются при помощи директивы section. Каждый фрагмент выполняется однократно. Разные фрагменты выполняются разными потоками. Завершение директивы по умолчанию синхронизируется Директивы section должны использоваться только в статическом контексте.

Слайд 36


Пример использования директивы sections… #include #define NMAX 1000 void main() { int i, n; float a[NMAX], b[NMAX], c[NMAX]; for (i=0; i < NMAX; i++)...
Описание слайда:
Пример использования директивы sections… #include #define NMAX 1000 void main() { int i, n; float a[NMAX], b[NMAX], c[NMAX]; for (i=0; i < NMAX; i++) a[i] = b[i] = i * 1.0; n = NMAX; #pragma omp parallel shared(a,b,c,n) private(i) { // продолжение на следующем слайде

Слайд 37


Пример использования директивы sections #pragma omp sections nowait { #pragma omp section for (i=0; i < n/2; i++) c[i] = a[i] + b[i]; #pragma omp...
Описание слайда:
Пример использования директивы sections #pragma omp sections nowait { #pragma omp section for (i=0; i < n/2; i++) c[i] = a[i] + b[i]; #pragma omp section for (i=n/2; i < n; i++) c[i] = a[i] + b[i]; } // end of sections } // end of parallel section }

Слайд 38


Объединение директив parallel и for/sections #include #define CHUNK 100 #define NMAX 1000 void main () { int i, n, chunk; float a[NMAX], b[NMAX],...
Описание слайда:
Объединение директив parallel и for/sections #include #define CHUNK 100 #define NMAX 1000 void main () { int i, n, chunk; float a[NMAX], b[NMAX], c[NMAX]; for (i=0; i < NMAX; i++) a[i] = b[i] = i * 1.0; n = NMAX; chunk = CHUNK; #pragma omp parallel for shared(a,b,c,n) \ schedule(static,chunk) for (i=0; i < n; i++) c[i] = a[i] + b[i]; }

Слайд 39


Директивы openmp
Описание слайда:
Директивы openmp

Слайд 40


Параметр reduction Параметр reduction определяет список переменных, для которых выполняется операция редукции (объединения). reduction (operator:...
Описание слайда:
Параметр reduction Параметр reduction определяет список переменных, для которых выполняется операция редукции (объединения). reduction (operator: list) Перед выполнением параллельной области для каждого потока создаются копии этих переменных. Потоки формируют значения в своих локальных переменных. При завершении параллельной области на всеми локальными значениями выполняются необходимые операции редукции, результаты которых запоминаются в исходных (глобальных) переменных.

Слайд 41


Пример использования параметра reduction #include void main() { // vector dot product int i, n, chunk; float a[100], b[100], result; n = 100; chunk =...
Описание слайда:
Пример использования параметра reduction #include void main() { // vector dot product int i, n, chunk; float a[100], b[100], result; n = 100; chunk = 10; result = 0.0; for (i=0; i < n; i++) { a[i] = i * 1.0; b[i] = i * 2.0; } #pragma omp parallel for default(shared) \ schedule(static,chunk) reduction(+:result) for (i=0; i < n; i++) result = result + (a[i] * b[i]); printf("Final result= %f\n",result); }

Слайд 42


Правила записи параметра reduction Возможный формат записи выражения: x = x op expr x = expr op x x binop = expr x++, ++x, x--, --x x должна быть...
Описание слайда:
Правила записи параметра reduction Возможный формат записи выражения: x = x op expr x = expr op x x binop = expr x++, ++x, x--, --x x должна быть скалярной переменной. expr не должно ссылаться на x. op (operator) должна быть неперегруженной операцией вида: +, -, *, /, &, ^, |, &&, || binop должна быть неперегруженной операцией вида: +, -, *, /, &, ^, |

Слайд 43


Заключение Данная лекция посвящена рассмотрению методов параллельного программирования для вычислительных систем с общей памятью с использованием...
Описание слайда:
Заключение Данная лекция посвящена рассмотрению методов параллельного программирования для вычислительных систем с общей памятью с использованием технологии OpenMP. В лекции проводится обзор технологии OpenMP. Рассматриваются директивы OpenMP, позволяющие определять параллельные области, управлять областью видимости данных, распределять вычислений между потоками, выполнять операции редукции. Дальнейшее изучение технологии OpenMP будет продолжено в одной из следующих лекций.

Слайд 44


Литература Гергель В.П. Высокопроизводительные вычисления для многопроцессорных многоядерных систем. - М.: Изд-во Московского университета, 2010. –...
Описание слайда:
Литература Гергель В.П. Высокопроизводительные вычисления для многопроцессорных многоядерных систем. - М.: Изд-во Московского университета, 2010. – 544 с. Дополнительная литература: Воеводин В.В., Воеводин Вл.В. Параллельные вычисления. – СПб.: БХВ-Петербург, 2002. Гергель В.П. Теория и практика параллельных вычислений. - М.: Интернет-Университет, БИНОМ. Лаборатория знаний, 2007. Гергель В.П. Новые языки и технологии параллельного программирования. - М.: Издательство Московского университета, 2012. – 434 с. Гергель В.П., Баркалов К.А., Мееров И.Б., Сысоев А.В. и др. Параллельные вычисления. Технологии и численные методы. Учебное пособие в 4 томах. – Нижний Новгород: Изд-во Нижегородского госуниверситета, 2013. – 1394 с.



Похожие презентации
Mypresentation.ru
Загрузить презентацию