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

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

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

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

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

Текст из PDF

Технология параллельного программированияOpenMPБахтин Владимир Александровичк.ф.-м.н., зав. сектором Института прикладнойматематики им М.В.Келдыша РАНассистент кафедры системного программированияфакультета вычислительной математики икибернетики Московского университета им. М.В.ЛомоносоваСодержание OpenMP – модель параллелизма по управлению Конструкции распределения работы Конструкции для синхронизации нитей Система поддержки выполнения OpenMP-программ.Переменные окружения, управляющие выполнениемOpenMP-программы Наиболее часто встречаемые ошибки в OpenMPпрограммах.

Функциональная отладка OpenMP-программ Отладка эффективности OpenMP-программ28 октябряМосква, 2011Технология параллельного программирования OpenMP2 из 142OpenMP- модель параллелизма по управлению Основные понятия Выполнение OpenMP-программы Модель памяти в OpenMP Классы переменных Параллельная область28 октябряМосква, 2011Технология параллельного программирования OpenMP3 из 142Обзор основных возможностей OpenMPC$OMP FLUSHC$OMP THREADPRIVATE(/ABC/)OpenMP:для написания#pragmaomp APIcriticalмногонитевых приложенийCALL CALL OMP_SET_NUM_THREADS(10) Множество директив компилятора,CALLOMP_TEST_LOCK(LCK)наборфункциибиблиотеки системыподдержки, переменныеокруженияC$OMPMASTERCALL OMP_INIT_LOCK (LCK)C$OMP ATOMIC Облегчает создание многонитиевыхC$OMP SINGLE PRIVATE(X)на Фортране,C и C++SETENVпрограммOMP_SCHEDULE“STATIC,4” Обобщение опыта созданияC$OMP PARALLEL DO ORDERED PRIVATE (A, B, C)C$OMP дляORDEREDпараллельных программSMP иDSM систем за последние 20 летC$OMP PARALLEL DO SHARED(A,B,C)C$OMP PARALLELREDUCTION (+: A, B)#pragma omp parallel for private(a, b)C$OMP PARALLEL COPYIN(/blk/)C$OMP BARRIERC$OMP DO LASTPRIVATE(XX)nthrds = OMP_GET_NUM_PROCS()28 октябряМосква, 2011C$OMP SECTIONSomp_set_lock(lck)Технология параллельного программирования OpenMP4 из 142Директивы и клаузыСпецификации параллелизма в OpenMP представляют собой директивывида:#pragma omp название-директивы[ клауза[ [,]клауза]...]Например:#pragma omp parallel default (none) shared (i,j)Исполняемые директивы: barrier taskwait flushОписательная директива: threadprivate28 октябряМосква, 2011Технология параллельного программирования OpenMP5 из 142Структурный блокДействие остальных директив распространяется на структурный блок:#pragma omp название-директивы[ клауза[ [,]клауза]...]{структурный блок}Структурный блок: блок кода с одной точкой входа и одной точкойвыхода.#pragma omp parallel#pragma omp parallel{{……mainloop: res[id] = f (id);mainloop: res[id] = f (id);if (res[id] != 0) goto mainloop;……}exit (0);if (res[id] != 0) goto mainloop;} Структурный блок28 октябряМосква, 2011Не структурный блокТехнология параллельного программирования OpenMP6 из 142Компиляция OpenMP-программыПроизводительКомпиляторОпция компиляцииGNUgcc-fopenmpXL C/C++ / FortranIBM-qsmp=ompSun MicrosystemsC/C++ / Fortran-xopenmpIntelC/C++ / Fortran-openmp/QopenmpPortland GroupC/C++ / Fortran-mpMicrosoftVisual Studio 2008 C++/openmp28 октябряМосква, 2011Технология параллельного программирования OpenMP7 из 142Условная компиляция OpenMP-программы#include <stdio.h>int main(){#ifdef _OPENMPprintf("Compiled by an OpenMP-compliant implementation.\n");#endifreturn 0;}В значении переменной _OPENMP зашифрован год и месяц (yyyymm)версии стандарта OpenMP, которую поддерживает компилятор.28 октябряМосква, 2011Технология параллельного программирования OpenMP8 из 142Использование функций поддержи выполнения OpenMPпрограмм (OpenMP API runtime library)#include <stdio.h>#include <omp.h> // Описаны прототипы всех функций и типовint main(){#pragma omp parallel{int id = omp_get_thread_num ();int numt = omp_get_num_threads ();printf(“Thread (%d) of (%d) threads alive\n”, id, numt);}return 0;}28 октябряМосква, 2011Технология параллельного программирования OpenMP9 из 142Выполнение OpenMP-программыFork-Join параллелизм: Главная (master) нить порождает группу (team) нитей по меренебходимости. Параллелизм добавляется инкрементально.Параллельные области28 октябряМосква, 2011Технология параллельного программирования OpenMP10 из 142Фрагмент программыint a, b, c, d, x, y;int *p, *q;int f(int *p, int *q);a = x * (x - 1);b = y * (y + 1);c = a * a + a * b + b * b;d = a * b * c;p = &a;q = &b;x = f(p, q);28 октябряМосква, 2011// переменные// указатели// прототип функции// a хранится в регистре// b хранится в регистре// будет использовано позднее// будет использовано позднее// получает адрес a// получает адрес b// вызов функции\Технология параллельного программирования OpenMP11 из 142Модель памяти в OpenMP001Нить001Нить001Нить28 октябряМосква, 2011Технология параллельного программирования OpenMP12 из 142Модель памяти в OpenMP… = i + 1;statici =int1 i = 0;#pragma omp flush (i)i=1#pragma omp flush (i)i =ii =i=+011;Нить001 1Нить001 0… = i + 2; // ?28 октябряМосква, 2011Технология параллельного программирования OpenMP13 из 142Консистентность памяти в OpenMPКорректная последовательность работы нитей с переменной:Нить0 записывает значение переменной - write(var)Нить0 выполняет операцию синхронизации – flush (var)Нить1 выполняет операцию синхронизации – flush (var)Нить1 читает значение переменной – read (var)Директива flush:#pragma omp flush [(list)] - для Си!$omp flush [(list)] - для Фортран28 октябряМосква, 2011Технология параллельного программирования OpenMP14 из 142Консистентность памяти в OpenMP1.

Если пересечение множеств переменных, указанных в операциях flush,выполняемых различными нитями не пустое, то результат выполненияопераций flush будет таким, как если бы эти операции выполнялись внекоторой последовательности (единой для всех нитей).2. Если пересечение множеств переменных, указанных в операциях flush,выполняемых одной нитью не пустое, то результат выполнения операцийflush, будет таким, как если бы эти операции выполнялись в порядке,определяемом программой.3. Если пересечение множеств переменных, указанных в операциях flush,пустое, то операции flush могут выполняться независимо (в любомпорядке).28 октябряМосква, 2011Технология параллельного программирования OpenMP15 из 142Директива flush#pragma omp flush [(список переменных)]По умолчанию все переменные приводятся в консистентное состояние (#pragmaomp 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.28 октябряМосква, 2011Технология параллельного программирования OpenMP16 из 142Классы переменных В модели программирования с разделяемой памятью:Большинство переменных по умолчанию считаются shared Глобальные переменные совместно используются всеми нитями(shared) :• Фортран: COMMON блоки, SAVE переменные, MODULEпеременные• Си: file scope, static• Динамически выделяемая память (ALLOCATE, malloc, new) Но не все переменные являются разделяемыми ...• Стековые переменные в подпрограммах (функциях),вызываемых из параллельного региона, являются private.• Переменные объявленные внутри блока операторовпараллельного региона являются приватными.• Счетчики циклов витки которых распределяются междунитями при помощи конструкций for и parallel for.•28 октябряМосква, 2011Технология параллельного программирования OpenMP17 из 142Классы переменныхdouble Array1[100];int main() {int Array2[100];#pragma omp parallel{int iam = omp_get_thread_num ();work(Array2);}printf(“%d\n”, Array2[0]);}TempArray, iamArray1, Array2,countTempArray, iamextern double Array1[10];void work(int *Array) {double TempArray[10];static int count;...}Array1, Array2,countTempArray, iam28 октябряМосква, 2011Технология параллельного программирования OpenMP18 из 142Классы переменныхМожно изменить класс переменной при помощи конструкций: shared (список переменных) private (список переменных) firstprivate (список переменных) lastprivate (список переменных) threadprivate (список переменных) default (private | shared | none)28 октябряМосква, 2011Технология параллельного программирования OpenMP19 из 142Конструкция privateКонструкция «private(var)» создает локальную копию переменной«var» в каждой из нитей.• Значение переменной не инициализировано• Приватная копия не связана с оригинальной переменной• В OpenMP 2.5 значение переменной «var» не определенопосле завершения параллельной конструкцииsum = -1.0;#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;}printf (“sum=%f\n", sum);28 октябряМосква, 2011Технология параллельного программирования OpenMP20 из 142Конструкция firstprivate«firstprivate» является специальным случаем «private»• Инициализирует каждую приватную копию соответствующимзначением из главной (master) нити.BOOL FirstTime=TRUE;#pragma omp parallel for firstprivate(FirstTime)for (row=0; row<height; row++){if (FirstTime == TRUE) { FirstTime = FALSE; FirstWork (row); }AnotherWork (row);}28 октябряМосква, 2011Технология параллельного программирования OpenMP21 из 142Конструкция lastprivatelastprivate передает значение приватной переменной, посчитанной напоследней итерации в глобальную переменную.int i;#pragma omp parallel{#pragma omp for lastprivate(i)for (i=0; i<n-1; i++)a[i] = b[i] + b[i+1];}a[i]=b[i]; /*i == n-1*/28 октябряМосква, 2011Технология параллельного программирования OpenMP22 из 142Директива threadprivateОтличается от применения конструкции private: private скрывает глобальные переменные threadprivate – переменные сохраняют глобальную областьвидимости внутри каждой нити#pragma omp threadprivate (Var)Var = 1Var = 228 октябряМосква, 2011… = VarЕсли количество нитейне изменилось, токаждая нить получитзначение, посчитанноев предыдущейпараллельной области.… = VarТехнология параллельного программирования OpenMP23 из 142Конструкция defaultМеняет класс переменной по умолчанию: default (shared) – действует по умолчанию default (private) – есть только в Fortran default (firstprivate) – есть только в Fortran OpenMP 3.1 default (none) – требует определить класс для каждой переменнойitotal = 100itotal = 100#pragma omp parallelprivate(np,each)#pragma omp parallel default(none)private(np,each) shared (itotal){{np = omp_get_num_threads()np = omp_get_num_threads()each = itotal/npeach = itotal/np………………}}28 октябряМосква, 2011Технология параллельного программирования OpenMP24 из 142Параллельная область (директива parallel)#pragma omp parallel [ клауза[ [, ] клауза] ...]структурный блокгде клауза одна из : default(shared | none) private(list) firstprivate(list) shared(list) reduction(operator: list) if(scalar-expression) num_threads(integer-expression) copyin(list)28 октябряМосква, 2011Технология параллельного программирования OpenMP25 из 142Вычисление числа 1 (1+x )4.04.0dx = 20Мы можемаппроксимировать интегралкак сумму прямоугольников:2.0N F(x )x  ii=00.028 октябряМосква, 20111.0XГде каждый прямоугольникимеет ширину x и высотуF(xi) в середине интервалаТехнология параллельного программирования OpenMP26 из 142Вычисление числа .

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