OpenMP (по Бахтину) (Лекции), страница 2

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

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

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

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

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

Последовательная программа#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;}28 октябряМосква, 2011Технология параллельного программирования OpenMP27 из 142Вычисление числа  на 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, 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;}28 октябряМосква, 2011Технология параллельного программирования OpenMP28 из 142Конфликт доступа к даннымПри взаимодействии через общую память нити должны синхронизоватьсвое выполнение.Thread0: sum = sum + val; && Thread1: sum = sum + val;ВремяThread 01LOAD R1,sum2LOAD R2,val3ADD R1,R2Thread 1LOAD R1,sum4LOAD R2,val5ADD R1,R26STORE R1,sum7STORE R1,sumРезультат зависит от порядка выполнения команд.

Требуется взаимноеисключение критических интервалов.28 октябряМосква, 2011Технология параллельного программирования OpenMP29 из 142Вычисление числа  на OpenMP#include <stdio.h>#include <omp.h>#define NUM_THREADS 32int main (){int n =100000, i;double pi, h, sum[NUM_THREADS], x;h = 1.0 / (double) n;#pragma omp parallel default (none) private (i,x) shared (n,h,sum){int id = omp_get_thread_num();int numt = omp_get_num_threads();for (i = id + 1, sum[id] = 0.0; i <= n; i=i+numt){x = h * ((double)i - 0.5);sum[id] += (4.0 / (1.0 + x*x));}}for(i=0, pi=0.0; i<NUM_THREADS; i++) pi += sum[i] * h;printf("pi is approximately %.16f”, pi);return 0;}28 октябряМосква, 2011Технология параллельного программирования OpenMP30 из 142Вычисление числа  на OpenMP.

Клауза reduction#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;}28 октябряМосква, 2011Технология параллельного программирования OpenMP31 из 142Клауза reductionreduction(operator:list) Внутри паралельной областидля каждой переменной изсписка list создается копия этойпеременной. Эта переменнаяинициализируется всоответствии с операторомoperator (например, 0 для «+»). Для каждой нити компиляторзаменяет в параллельнойобласти обращения кредукционной переменной наобращения к созданной копии. По завершении выполненияпараллельной областиосуществляется объединениеполученных результатов.28 октябряМосква, 2011ОператорНачальное значение+0*1-0&~0|0^0&&1||0Least number inreduction list item typeLargest number inreduction list item typemaxminТехнология параллельного программирования OpenMP32 из 142Клауза ifif(scalar-expression)В зависимости от значения scalar-expression для выполнения структурногоблока будет создана группа нитей или он будет выполняться однойнитью.#include <stdio.h>#include <omp.h>int main(){int n = 0;printf("Enter the number of intervals: (0 quits) ");scanf("%d",&n);#pragma omp parallel if (n>10){int id = omp_get_thread_num ();func (n, id);}return 0;}28 октябряМосква, 2011Технология параллельного программирования OpenMP33 из 142Клауза num_threadsnum_threads(integer-expression)integer-expression задает максимально возможное число нитей, которыебудут созданы для выполнения структурного блока#include <omp.h>int main(){int n = 0;printf("Enter the number of intervals: (0 quits) ");scanf("%d",&n);omp_set_dynamic(1);#pragma omp parallel num_threads(10){int id = omp_get_thread_num ();func (n, id);}return 0;}28 октябряМосква, 2011Технология параллельного программирования OpenMP34 из 142Клауза copyincopyin(list)Значение каждой threadprivate-переменной из списка list, устанавливаетсяравным значению этой переменной в master-нити#include <stdlib.h>float* work;int size;float tol;#pragma omp threadprivate(work,size,tol)void build(){int i;work = (float*)malloc( sizeof(float)*size );for( i = 0; i < size; ++i ) work[i] = tol;}int main(){read_from_file (&tol, &size);#pragma omp parallel copyin(tol,size)build();}28 октябряМосква, 2011Технология параллельного программирования OpenMP35 из 142Содержание Современные направления развития параллельныхвычислительных систем OpenMP – модель параллелизма по управлению Конструкции распределения работы Конструкции для синхронизации нитей Система поддержки выполнения OpenMP-программ.Переменные окружения, управляющие выполнениемOpenMP-программы Наиболее часто встречаемые ошибки в OpenMPпрограммах.

Функциональная отладка OpenMP-программ Отладка эффективности OpenMP-программ28 октябряМосква, 2011Технология параллельного программирования OpenMP36 из 142Конструкции распределения работы Распределение витков циклов (директива for) Распределение нескольких структурных блоков междунитями (директива section) Выполнение структурного блока одной нитью (директиваsingle) Задачи (директива task)28 октябряМосква, 2011Технология параллельного программирования OpenMP37 из 142Вычисление числа 1 (1+x )4.04.0dx = 20Мы можемаппроксимировать интегралкак сумму прямоугольников:2.0N F(x )x  ii=00.028 октябряМосква, 20111.0XГде каждый прямоугольникимеет ширину x и высотуF(xi) в середине интервалаТехнология параллельного программирования OpenMP38 из 142Вычисление числа .

Последовательная программа#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;}28 октябряМосква, 2011Технология параллельного программирования OpenMP39 из 142Вычисление числа  на OpenMPint main (){int n =100, 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;} октября28Москва, 2011Технология параллельного программирования OpenMP40 из 142Вычисление числа  на OpenMP#include <stdio.h>#include <omp.h>int main (){int n =100, 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;}28 октябряМосква, 2011Технология параллельного программирования OpenMP41 из 142Распределение витков цикла#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• nowait28 октябряМосква, 2011Технология параллельного программирования OpenMP42 из 142Распределение витков циклаinit-expr : var = loop-invariant-expr1| integer-type var = loop-invariant-expr1| random-access-iterator-type var = loop-invariant-expr1| pointer-type var = loop-invariant-expr1test-expr:var relational-op loop-invariant-expr2| loop-invariant-expr2 relational-op varincr-expr: ++var| var++| --var| 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- expr28 октябряМосква, 2011relational-op: <| <=|>| >=var: signed or unsigned integer type| random access iterator type| pointer typeТехнология параллельного программирования OpenMP43 из 142Parallel 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 //}}28 октябряМосква, 2011Технология параллельного программирования OpenMP44 из 142Использование указателей в цикле (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++ ) - ошибка28 октябряМосква, 2011Технология параллельного программирования OpenMP45 из 142Вложенность конструкций распределения работы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);}}}28 октябряМосква, 2011Технология параллельного программирования OpenMP46 из 142Вложенность конструкций распределения работы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);}}}}28 октябряМосква, 2011Технология параллельного программирования OpenMP47 из 142Распределение витков многомерных циклов.

Клаузаcollapse (OpenMP 3.0)void work(int i, int j) {}void good_collapsing(int n){int i, j;#pragma omp parallel default(shared){#pragma omp for collapse (2)for (i=0; i<n; i++) {for (j=0; j < n; j++)work(i, j);}}}Клауза collapse:collapse (положительная целая константа)28 октябряМосква, 2011Технология параллельного программирования OpenMP48 из 142Распределение витков многомерных циклов. Клаузаcollapse (OpenMP 3.0)void work(int i, int j) {}void error_collapsing(int n){int i, j;#pragma omp parallel default(shared){#pragma omp for collapse (2)for (i=0; i<n; i++) {work_with_i (i);// Ошибкаfor (j=0; j < n; j++)work(i, j);}}}Клауза collapse может быть использована только для распределениявитков тесно-вложенных циклов.28 октябряМосква, 2011Технология параллельного программирования OpenMP49 из 142Распределение витков многомерных циклов.

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