лекции (OpenMP), страница 5

PDF-файл лекции (OpenMP), страница 5 Параллельное программирование для высокопроизводительных вычислительных систем (63916): Лекции - 11 семестр (3 семестр магистратуры)лекции (OpenMP) - PDF, страница 5 (63916) - СтудИзба2020-08-25СтудИзба

Описание файла

Файл "лекции" внутри архива находится в папке "OpenMP". PDF-файл из архива "OpenMP", который расположен в категории "". Всё это находится в предмете "параллельное программирование для высокопроизводительных вычислительных систем" из 11 семестр (3 семестр магистратуры), которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .

Просмотр PDF-файла онлайн

Текст 5 страницы из PDF

Директива taskЯвные задачи (explicit tasks) задаются при помощи директивы:#pragma omp task [клауза[[,] клауза] ...]структурный блокгде клауза одна из :if (scalar-expression)final (scalar-expression)//OpenMP 3.1Untiedmergeable//OpenMP 3.1shared (list)private (list)firstprivate (list)default ( shared | none)depend(dependence-type: list) // OpenMP 4.0В результате выполнения директивы task создается новая задача, котораясостоит из операторов структурного блока; все используемые в операторахпеременные могут быть локализованы внутри задачи при помощисоответствующих клауз. Созданная задача будет выполнена одной нитью изгруппы.Параллельное программирование с OpenMP: Основные понятияМосква, 2015 г.© Бахтин В.А.31 из 42Использование директивы task.for (i=0; i<n; i++) {func(i);}#pragma omp parallel{…#pragma omp single // Блок операторов, выполняемый 1-ой нитью{for (i=0; i<n; i++) {#pragma omp task firstprivate(i)func(i);}}}Москва, 2015 г.Параллельное программирование с OpenMP: Основные понятия© Бахтин В.А.32 из 42Использование директивы task.typedef struct node node;struct node {int data;node * next;};void increment_list_items(node * head){#pragma omp parallel{#pragma omp single{node * p = head;while (p) {#pragma omp taskprocess(p);p = p->next;}}}Параллельное программирование с OpenMP: Основные понятия}Москва, 2015 г.© Бахтин В.А.33 из 42Использование директивы task.

Клауза ifdouble *item;int main() {#pragma omp parallel shared (item){#pragma omp single{int size;scanf("%d",&size);item = (double*)malloc(sizeof(double)*size);for (int i=0; i<size; i++)#pragma omp task if (size > 10)process(item[i]);}}}Если накладные расходы на организацию задач превосходят время,необходимое для выполнения блока операторов этой задачи, то блокоператоров будет немедленно выполнен нитью, выполнившей директиву task.Москва, 2015 г.Параллельное программирование с OpenMP: Основные понятия© Бахтин В.А.34 из 42Использование директивы task.#define LARGE_NUMBER 10000000Как правило, в компиляторахdouble item[LARGE_NUMBER];существуют ограничения на количествоextern void process(double);создаваемых задач. Выполнение цикла,int main() {в котором создаются задачи, будет#pragma omp parallel shared (item)приостановлено. Нить, выполнявшая{этот цикл, будет использована для#pragma omp singleвыполнения одной из задач.{for (int i=0; i<LARGE_NUMBER; i++)#pragma omp taskprocess(item[i]);}}}Москва, 2015 г.Параллельное программирование с OpenMP: Основные понятия© Бахтин В.А.35 из 42Использование директивы task.

Клауза untied#define LARGE_NUMBER 10000000double item[LARGE_NUMBER];extern void process(double);Клауза untied - выполнение задачи послеint main() {приостановки может быть продолжено#pragma omp parallelлюбой нитью группы{#pragma omp single{#pragma omp task untied{for (int i=0; i<LARGE_NUMBER; i++)#pragma omp taskprocess(item[i]);}}}}Москва, 2015 г.Параллельное программирование с OpenMP: Основные понятия© Бахтин В.А.36 из 42Использование директивы task.int main () {int res;#pragma omp parallel{#pragma omp single{int n;scanf("%d",&n);#pragma omp task shared(res)res = fibonacci(n);}}printf (“Finonacci number = %d\n”, res);}0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765,10946, …int fibonacci(int n) {int i, j;if (n<2)return n;else {#pragma omp task shared(i)i=fibonacci (n-1);#pragma omp task shared(j)j=fibonacci (n-2);#pragma omp taskwaitreturn i+j;}}Москва, 2015 г.Параллельное программирование с OpenMP: Основные понятия© Бахтин В.А.37 из 42Использование директивы task.

Клауза finalvoid fib (int n, int d) {int x, y;if (n < 2) return 1;#pragma omp task final (d > LIMIT) mergeablex = fib (n - 1, d + 1);#pragma omp task final (d > LIMIT) mergeabley = fib (n - 2, d + 1);#pragma omp taskwaitreturn x + y;}int omp_in_final (void);Москва, 2015 г.Параллельное программирование с OpenMP: Основные понятия© Бахтин В.А.38 из 42Использование директивы task.

Клауза dependdepend(dependence-type: list)где dependence-type:inoutinoutСекция массива:[lower-bound : length][lower-bound:][:length][:]void sort ( int n, int *a ) {#pragma omp task depend (inout: a [ 0 : n/2 ] )sort ( n/2, a );#pragma omp task depend (inout: a [ n/2+1 : n/2 )sort ( n/2, a[n/2+1] );#pragma omp task depend (inout : a [ 0 : n / 2 ], a [ n/2+1 : n/2 ] )merge ( n/2 , a, a[n/2+1], a );}Москва, 2015 г.Параллельное программирование с OpenMP: Основные понятия© Бахтин В.А.39 из 42Вопросы?Вопросы?Москва, 2015 г.Параллельное программирование с OpenMP: Основные понятия© Бахтин В.А.40 из 42Следующая темаКонструкции распределения работыМосква, 2015 г.Параллельное программирование с OpenMP: Основные понятия© Бахтин В.А.41 из 42КонтактыБахтин В.А., кандидат физ.-мат.

наук, заведующийсектором, Институт прикладной математики им.М.В.Келдыша РАНbakhtin@keldysh.ruМосква, 2015 г.Параллельное программирование с OpenMP: Основные понятия© Бахтин В.А.42 из 42Интернет УниверситетСуперкомпьютерных технологийКонструкции распределения работыУчебный курсПараллельное программирование сOpenMPБахтин В.А., кандидат физ.-мат.

наук,заведующий сектором,Институт прикладной математики им.М.В.Келдыша РАНСодержаниеРаспределение витков циклов.Циклы с зависимостью по данным. Организация конвейерноговыполнения для циклов с зависимостью по данным.Распределение нескольких структурных блоков между нитями(директива SECTION).Выполнение структурного блока одной нитью (директиваSINGLE).Распределение операторов одного структурного блока междунитями (директива WORKSHARE).Москва, 2015 г.Параллельное программирование с OpenMP: Конструкциираспределения работы © Бахтин В.А.2 из 42Вычисление числа 14.04.0(1+x2)dx = 0Мы можемаппроксимировать интегралкак сумму прямоугольников:2.0N F(x )x  ii=00.0Москва, 2015 г.1.0XГде каждый прямоугольникимеет ширину x и высотуF(xi) в середине интервалаПараллельное программирование с OpenMP: Конструкциираспределения работы © Бахтин В.А.3 из 42Вычисление числа .

Последовательнаяпрограмма.#include <stdio.h>int main (){int n =100000, i;double pi, h, sum, x;h = 1.0 / (double) n;sum = 0.0;for (i = 1; i <= n; i ++){x = h * ((double)i - 0.5);sum += (4.0 / (1.0 + x*x));}pi = h * sum;printf("pi is approximately %.16f”, pi);return 0;}Москва, 2015 г.Параллельное программирование с OpenMP: Конструкциираспределения работы © Бахтин В.А.4 из 42Вычисление числа  на OpenMP#include <stdio.h>#include <omp.h>int main (){int n =100000, i;double pi, h, sum, x;h = 1.0 / (double) n;sum = 0.0;#pragma omp parallel default (none) private (i,x) shared (n,h) reduction(+:sum){int id = omp_get_thread_num();int numt = omp_get_num_threads();for (i = id + 1; i <= n; i=i+numt){x = h * ((double)i - 0.5);sum += (4.0 / (1.0 + x*x));}}pi = h * sum;printf("pi is approximately %.16f”, pi);return 0;}Москва, 2015 г.Параллельное программирование с OpenMP: Конструкциираспределения работы © Бахтин В.А.5 из 42Вычисление числа  на OpenMP#include <stdio.h>#include <omp.h>int main (){int n =100000, i;double pi, h, sum, x;h = 1.0 / (double) n;sum = 0.0;#pragma omp parallel default (none) private (i,x) shared (n,h) reduction(+:sum){#pragma omp for schedule (static, 1)for (i = 1; i <= n; i++){x = h * ((double)i - 0.5);sum += (4.0 / (1.0 + x*x));}}pi = h * sum;printf(“pi is approximately %.16f”, pi);return 0;}Москва, 2015 г.Параллельное программирование с OpenMP: Конструкциираспределения работы © Бахтин В.А.6 из 42Вычисление числа  на OpenMP#include <omp.h>int main (){int n =100000, i;double pi, h, sum, x;h = 1.0 / (double) n;sum = 0.0;#pragma omp parallel default (none) private (i,x) shared (n,h) reduction(+:sum){int iam = omp_get_thread_num();int numt = omp_get_num_threads();int start = iam * n / numt + 1;int end = (iam + 1) * n / numt;if (iam == numt -1) end = n;for (i = start; i <= end; i++){x = h * ((double)i - 0.5);sum += (4.0 / (1.0 + x*x));}}pi = h * sum;printf(“pi is approximately %.16f”, pi);return 0;}Москва, 2015 г.Параллельное программирование с OpenMP: Конструкциираспределения работы © Бахтин В.А.7 из 42Вычисление числа  на OpenMP#include <stdio.h>#include <omp.h>int main (){int n =100000, i;double pi, h, sum, x;h = 1.0 / (double) n;sum = 0.0;#pragma omp parallel default (none) private (i,x) shared (n,h) reduction(+:sum){#pragma omp for schedule (static)for (i = 1; i <= n; i++){x = h * ((double)i - 0.5);sum += (4.0 / (1.0 + x*x));}}pi = h * sum;printf(“pi is approximately %.16f”, pi);return 0;}Москва, 2015 г.Параллельное программирование с OpenMP: Конструкциираспределения работы © Бахтин В.А.8 из 42Распределение витков цикла#pragma omp for [клауза[[,]клауза] ...

]for (init-expr; test-expr; incr-expr) структурный блокгде клауза одна из : private(list) firstprivate(list) lastprivate(list) reduction(operator: list) schedule(kind[, chunk_size]) collapse(n) ordered nowaitМосква, 2015 г.Параллельное программирование с OpenMP: Конструкциираспределения работы © Бахтин В.А.9 из 42Распределение витков циклаinit-expr : var = loop-invariant-expr1| integer-type var = loop-invariant-expr 1| random-access-iterator-type var = loop-invariant-expr 1| pointer-type var = loop-invariant-expr 1test-expr:var relational-op loop-invariant-expr2| loop-invariant-expr2 relational-op varrelational-op: <| <=|>| >=incr-expr: ++varvar: signed or unsigned integer type| var++| random access iterator type| --var| pointer type| var -| var += loop-invariant-integer- expr| var -= loop-invariant-integer- expr| var = var + loop-invariant-integer- expr| var = loop-invariant-integer- expr + var| var = var - loop-invariant-integer- exprМосква, 2015 г.Параллельное программирование с OpenMP: Конструкциираспределения работы © Бахтин В.А.10 из 42Parallel Random Access Iterator Loop (OpenMP 3.0)#include <vector>void iterator_example(){std::vector<int> vec(23);std::vector<int>::iterator it;#pragma omp parallel for default(none) shared(vec)for (it = vec.begin(); it < vec.end(); it++){// do work with *it //}}Москва, 2015 г.Параллельное программирование с OpenMP: Конструкциираспределения работы © Бахтин В.А.11 из 42Использование указателей в цикле (OpenMP 3.0)void pointer_example (){char a[N];#pragma omp for default (none) shared (a,N)for (char *p = a; p < (a+N); p++ ){use_char (p);}}for (char *p = a; p != (a+N); p++ ) - ошибкаМосква, 2015 г.Параллельное программирование с OpenMP: Конструкциираспределения работы © Бахтин В.А.12 из 42Вложенность конструкций распределения работыvoid work(int i, int j) {}void wrong1(int n){#pragma omp parallel default(shared){int i, j;#pragma omp forfor (i=0; i < n; i++) {/* incorrect nesting of loop regions */#pragma omp forfor (j=0; j < n; j++)work(i, j);}}}Москва, 2015 г.Параллельное программирование с OpenMP: Конструкциираспределения работы © Бахтин В.А.13 из 42Вложенность конструкций распределения работыvoid work(int i, int j) {}void good_nesting(int n){int i, j;#pragma omp parallel default(shared){#pragma omp forfor (i=0; i < n; i++) {#pragma omp parallel shared(i, n){#pragma omp forfor (j=0; j < n; j++)work(i, j);}}}}Москва, 2015 г.Параллельное программирование с OpenMP: Конструкциираспределения работы © Бахтин В.А.14 из 42Распределение витков многомерных циклов.

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5137
Авторов
на СтудИзбе
440
Средний доход
с одного платного файла
Обучение Подробнее