Гергель В.П. Общий курс Теория и практика параллельных вычислений Лекция 15 Методы разработки параллельных программ для многопроцессорных систем с общей.

Slides:



Advertisements
Similar presentations
Implementing Domain Decompositions Intel Software College Introduction to Parallel Programming – Part 3.
Advertisements

NewsFlash!! Earth Simulator no longer #1. In slightly less earthshaking news… Homework #1 due date postponed to 10/11.
1 Programming Explicit Thread-level Parallelism  As noted previously, the programmer must specify how to parallelize  But, want path of least effort.
Indian Institute of Science Bangalore, India भारतीय विज्ञान संस्थान बंगलौर, भारत Supercomputer Education and Research Centre (SERC) Adapted from: o “MPI-Message.
Open[M]ulti[P]rocessing Pthreads: Programmer explicitly define thread behavior openMP: Compiler and system defines thread behavior Pthreads: Library independent.
Mohsan Jameel Department of Computing NUST School of Electrical Engineering and Computer Science 1.
Программирование в OpenMP ЛЕКЦИЯ №5 Калинина А.П..
Introduction to OpenMP For a more detailed tutorial see: Look at the presentations also see:
Директивы OpenMP Юрий Долгов, Дмитрий Шкурко. Optimization of applications for Intel* platforms Синтаксис OpenMP Общий синтаксис OpenMP директив Directive.
1 OpenMP—An API for Shared Memory Programming Slides are based on:
Демидов А.В г. Операционные системы Лекция 3 Процессы.
Computer Architecture II 1 Computer architecture II Programming: POSIX Threads OpenMP.
Введение в параллельные вычисления. Технология программирования MPI (день седьмой) Антонов Александр Сергеевич, к.ф.-м.н., н.с. лаборатории Параллельных.
1 Организация вычислительной системы ЛЕКЦИЯ №2 Калинина А.П.
Гергель В.П. Общий курс Теория и практика параллельных вычислений Лекция 16 Методы разработки параллельных программ для многопроцессорных систем с общей.
Гергель В.П. Общий курс Теория и практика параллельных вычислений Лекция 4 Методы разработки параллельных программ при использования интерфейса передачи.
Software & Services Group, Developer Products Division Copyright© 2010, Intel Corporation. All rights reserved. *Other brands and names are the property.
1 Friday, November 10, 2006 “ Programs for sale: Fast, Reliable, Cheap: choose two.” -Anonymous.
Пользовательские действия (custom actions) в JSP. JSTL.
1 ITCS4145/5145, Parallel Programming B. Wilkinson Feb 21, 2012 Programming with Shared Memory Introduction to OpenMP.
CSCI-6964: High Performance Parallel & Distributed Computing (HPDC) AE 216, Mon/Thurs 2-3:20 p.m. Pthreads (reading Chp 7.10) Prof. Chris Carothers Computer.
Демидов А.В г. Операционные системы Лекция 4 Работа с файлами.
OpenMPI Majdi Baddourah
A Very Short Introduction to OpenMP Basile Schaeli EPFL – I&C – LSP Vincent Keller EPFL – STI – LIN.
INTEL CONFIDENTIAL OpenMP for Domain Decomposition Introduction to Parallel Programming – Part 5.
Обработка исключений в C# Единая техника обнаружения ошибок времени выполнения и передачи информации о них.
Introduction to OpenMP Introduction OpenMP basics OpenMP directives, clauses, and library routines.
1 Parallel Programming With OpenMP. 2 Contents  Overview of Parallel Programming & OpenMP  Difference between OpenMP & MPI  OpenMP Programming Model.
Programming with Shared Memory Introduction to OpenMP
Shared Memory Parallelization Outline What is shared memory parallelization? OpenMP Fractal Example False Sharing Variable scoping Examples on sharing.
Shared Memory Parallelism - OpenMP Sathish Vadhiyar Credits/Sources: OpenMP C/C++ standard (openmp.org) OpenMP tutorial (
Introduction to OpenMP
UNIT -6 PROGRAMMING SHARED ADDRESS SPACE PLATFORMS THREAD BASICS PREPARED BY:-H.M.PATEL.
Chapter 17 Shared-Memory Programming. Introduction OpenMP is an application programming interface (API) for parallel programming on multiprocessors. It.
OpenMP - Introduction Süha TUNA Bilişim Enstitüsü UHeM Yaz Çalıştayı
Lecture 8: OpenMP. Parallel Programming Models Parallel Programming Models: Data parallelism / Task parallelism Explicit parallelism / Implicit parallelism.
OpenMP – Introduction* *UHEM yaz çalıştayı notlarından derlenmiştir. (uhem.itu.edu.tr)
OpenMP Martin Kruliš Jiří Dokulil. OpenMP OpenMP Architecture Review Board Compaq, HP, Intel, IBM, KAI, SGI, SUN, U.S. Department of Energy,…
CS 838: Pervasive Parallelism Introduction to OpenMP Copyright 2005 Mark D. Hill University of Wisconsin-Madison Slides are derived from online references.
Work Replication with Parallel Region #pragma omp parallel { for ( j=0; j
OpenMP fundamentials Nikita Panov
Introduction to OpenMP
09/09/2010CS4961 CS4961 Parallel Programming Lecture 6: Data Parallelism in OpenMP, cont. Introduction to Data Parallel Algorithms Mary Hall September.
Shared Memory Parallelism - OpenMP Sathish Vadhiyar Credits/Sources: OpenMP C/C++ standard (openmp.org) OpenMP tutorial (
9/22/2011CS4961 CS4961 Parallel Programming Lecture 9: Task Parallelism in OpenMP Mary Hall September 22,
Parallel Programming Models (Shared Address Space) 5 th week.
10/05/2010CS4961 CS4961 Parallel Programming Lecture 13: Task Parallelism in OpenMP Mary Hall October 5,
Heterogeneous Computing using openMP lecture 2 F21DP Distributed and Parallel Technology Sven-Bodo Scholz.
CPE779: Shared Memory and OpenMP Based on slides by Laxmikant V. Kale and David Padua of the University of Illinois.
COMP7330/7336 Advanced Parallel and Distributed Computing OpenMP: Programming Model Dr. Xiao Qin Auburn University
B. Estrade, LSU – High Performance Computing Enablement Group OpenMP II B. Estrade.
OpenMP An API : For Writing Portable SMP Application Software Rider NCHC GTD.
MPSoC Architectures OpenMP Alberto Bosio
Introduction to OpenMP
Shared Memory Parallelism - OpenMP
Auburn University COMP7330/7336 Advanced Parallel and Distributed Computing Improving Barrier Performance Dr. Xiao Qin.
Auburn University COMP7330/7336 Advanced Parallel and Distributed Computing A bug in the rwlock program Dr. Xiao Qin.
Introduction to OpenMP
Shared-Memory Programming
September 4, 1997 Parallel Processing (CS 667) Lecture 5: Shared Memory Parallel Programming with OpenMP* Jeremy R. Johnson Parallel Processing.
Computer Science Department
Programming with Shared Memory
Prof. Thomas Sterling Department of Computer Science
September 4, 1997 Parallel Processing (CS 730) Lecture 5: Shared Memory Parallel Programming with OpenMP* Jeremy R. Johnson Wed. Jan. 31, 2001 *Parts.
September 4, 1997 Parallel Processing (CS 730) Lecture 5: Shared Memory Parallel Programming with OpenMP* Jeremy R. Johnson *Parts of this lecture.
Programming with Shared Memory Introduction to OpenMP
Introduction to OpenMP
OpenMP Martin Kruliš.
OpenMP Parallel Programming
Shared-Memory Paradigm & OpenMP
Presentation transcript:

Гергель В.П. Общий курс Теория и практика параллельных вычислений Лекция 15 Методы разработки параллельных программ для многопроцессорных систем с общей памятью (стандарт OpenMP) Нижегородский Государственный Университет им. Н.И. Лобачевского

Параллельные Гергель В.П Содержание Стратегия подхода –OpenMP - стандарт параллельного программирования для систем с общей памятью –Положительные стороны –Принципы организации параллелизма –Структура OpenMP Директивы OpenMPДирективы OpenMP –Формат записи директив –Области видимости директив –Типы директив –Определение параллельной области Директива parallel –Распределение вычислений между потоками Директива DO/for Директива sections Директива single Информационные ресурсы

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

Параллельные Гергель В.П Стратегия подхода… Динамика развития стандарта OpenMP Fortran API v1.0 (1997) OpenMP C/C++ API v1.0 (1998) OpenMP Fortran API v2.0 (2000) (OpenMP C/C++ API v2.0 – ожидается в 2001) Разработкой стандарта занимается организация OpenMP ARB (ARchitecture Board), в которую вошли представители крупнейших компаний - разработчиков SMP-архитектур и программного обеспечения.

Параллельные Гергель В.П Стратегия подхода… При разработке стандарта в значительной степени учитывались результаты предшествующих исследований X3H5 (ANSI стандарт, 1993) - MPP POSIX Threads (Ptheads), IEEE c, Unix

Параллельные Гергель В.П Стратегия подхода… Основания для достижения эффекта – разделяемые для параллельных процессов данные располагаются в общей памяти и для организации взаимодействия не требуется операций передачи сообщений. Интерфейс OpenMP служит основой для формирования новой технологии параллельного программирования для систем общей памяти (shared- memory programming)

Параллельные Гергель В.П Стратегия подхода… Положительные стороны Поэтапное (инкрементальное) распараллеливание –Можно распараллеливать последовательные программы поэтапно, не меняя их структуру Единственность разрабатываемого кода –Нет необходимости поддерживать последовательный и параллельный вариант программы, поскольку д ирективы игнорируются обычными компиляторами (в общем случае) Эффективность –Учет и использование возможностей систем с общей памятью Стандартизованность (переносимость), поддержка в наиболее распространенных языках (C, Fortran) и платформах (Windows, Unix)

Параллельные Гергель В.П Стратегия подхода… Принцип организации параллелизма… Использование потоков (общее адресное пространство) Пульсирующий ("вилочный", fork-join) параллелизм Параллельные области Главный поток

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

Параллельные Гергель В.П Стратегия подхода Структура Набор директив компилятора Библиотека функций Набор переменных окружения Изложение материала будет проводиться на примере языка C

Параллельные Гергель В.П Директивы OpenMP Формат #pragma omp имя_директивы [clause,…] Пример #pragma omp parallel default(shared) \ private(beta,pi) Формат записи директив

Параллельные Гергель В.П Директивы OpenMP Области видимости директив #pragma omp parallel { TypeThreadNum(); } void Type ThreadNum() { int num; num = omp_get_thread_num(); #pragma omp critical printf("Hello from %d\n",num); } + Отделяемые директивы могут появляться вне параллельной области Динамический контекст параллельной области (включает статический контекст) node.c root.c Статический (лексический) контекст параллельной области

Параллельные Гергель В.П Директивы OpenMP Директивы OpenMP можно разделить на 3 типа: определение параллельной области, разделение работы, синхронизация. Типы директив

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

Параллельные Гергель В.П Директивы OpenMP Директива parallel (формат) #pragma omp parallel [clause...] newline structured_block clause if (scalar_expression) private (list) shared (list) default (shared | none) firstprivate (list) reduction (operator: list) copyin (list) Определение параллельной области…

Параллельные Гергель В.П Директивы OpenMP Директива parallel (семантика) Количество потоков (по убыванию старшинства) –omp_set_num_threads() – OMP_NUM_THREADS – параметр реализации Динамические потоки –По умолчанию количество потоков одинаковое – для активизации динамического режима функция omp_set_dynamic() или переменная OMP_DYNAMIC Вложенность параллельных областей (во многих реализациях не обеспечивается) –по умолчанию во вложенной области создается один поток; – управление - функция omp_set_nested() или переменная OMP_NESTED Параметры (clause) – если условие в if не выполняется, то процессы не создаются Определение параллельной области…

Параллельные Гергель В.П Директивы OpenMP Директива parallel (пример) #include main () { int nthreads, tid; /* Создание параллельной области */ #pragma omp parallel private(nthreads, 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); } }/* Завершение параллельной области */ } Определение параллельной области

Параллельные Гергель В.П Директивы OpenMP Существует 3 директивы для распределения вычислений в параллельной области DO / for – распараллеливание циклов sections – распараллеливание раздельных фрагментов кода (функциональное распараллеливание) single – директива для указания последовательного выполнения кода Распределение вычислений между потоками… Существует 3 директивы для распределения вычислений в параллельной области DO / for – распараллеливание циклов sections – распараллеливание раздельных фрагментов кода (функциональное распараллеливание) single – директива для указания последовательного выполнения кода ! Начало выполнения директив по умолчанию не синхронизируется, завершение директив по умолчанию является синхронным

Параллельные Гергель В.П Директивы OpenMP Распределение вычислений между потоками… Директива DO/for – распределение итераций цикла между потоками; параллельная область уже должна быть активна, иначе игнорируется

Параллельные Гергель В.П Директивы OpenMP Распределение вычислений между потоками… Директива DO/for (формат) #pragma omp for [clause...] newline for_loop clause schedule (type [,chunk]) ordered private (list) firstprivate (list) lastprivate (list) shared (list) reduction (operator: list) nowait

Параллельные Гергель В.П Директивы OpenMP Распределение вычислений между потоками… Директива DO/for - распределение итераций регулируется параметром schedule static – итерации делятся на блоки по chunk итераций и статически разделяются между потоками; если параметр chunk не определен, итерации делятся между потоками равномерно и непрерывно dynamic – распределение итерационных блоков осуществляется динамически (по умолчанию chunk=1) guided – размер итерационного блока уменьшает экспоненциально при каждом распределении; chunk определяет минимальный размер блока (по умолчанию chunk=1) runtime – правило распределения определяется переменной OMP_SCHEDULE (при использовании runtime параметр chunk задаваться не должен)

Параллельные Гергель В.П Директивы OpenMP Распределение вычислений между потоками… Директива DO/for (пример) #include #define CHUNK 100 #define NMAX 1000 main () { int i, n, chunk; float a[NMAX], b[NMAX], c[NMAX]; /* Some initializations */ 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) nowait for (i=0; i < n; i++) c[i] = a[i] + b[i]; } /* end of parallel section */ }

Параллельные Гергель В.П Директивы OpenMP Распределение вычислений между потоками… Директива sections – распределение вычислений для раздельных фрагментов кода фрагменты выделяются при помощи директивы section каждый фрагмент выполняется однократно разные фрагменты выполняются разными потоками завершение директивы по умолчанию синхронизируется директивы section должны использоваться только в статическом контексте

Параллельные Гергель В.П Директивы OpenMP Распределение вычислений между потоками… Директива sections

Параллельные Гергель В.П Директивы OpenMP Распределение вычислений между потоками… Директива sections (формат) #pragma omp sections [clause...] newline { #pragma omp section newline structured_block #pragma omp section newline structured_block } clause private (list) firstprivate (list) lastprivate (list) reduction (operator: list) nowait

Параллельные Гергель В.П Директивы OpenMP Распределение вычислений между потоками… Директива sections (пример) #include #define NMAX 1000 main () { int i, n; float a[NMAX], b[NMAX], c[NMAX]; /* Some initializations */ 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) { #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 */ }

Параллельные Гергель В.П Директивы OpenMP Распределение вычислений между потоками… Директива single – определение фрагмента кода, который должен быть выполнен только одним потоком; все остальные потоки ожидают завершения выполнения фрагмента (если не указан параметр nowait)

Параллельные Гергель В.П Директивы OpenMP Распределение вычислений между потоками… Директива single (формат) #pragma omp single [clause...] newline structured_block clause private (list) firstprivate (list) nowait

Параллельные Гергель В.П Директивы OpenMP Распределение вычислений между потоками Объединение директив parallel и for/sections в случае, если в параллельной области содержится только одну директиву for (sections) #include #define CHUNK 100 #define NMAX 1000 main () { int i, n, chunk; float a[NMAX], b[NMAX], c[NMAX]; /* Some initializations */ 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) private(i) \ schedule(static,chunk) for (i=0; i < n; i++) c[i] = a[i] + b[i]; }

Параллельные Гергель В.П Информационные ресурсы Что такое OpenMP OpenMP C/C++ specification v Introduction to OpenMP - MAIN.html MAIN.html Chandra, R., Menon, R., Dagum, L., Kohr, D., Maydan, D., McDonald, J. (2000). Parallel Programming in OpenMP. Morgan Kaufmann Publishers.

Параллельные Гергель В.П Вопросы для обсуждения Возможности OpenMP для распараллеливания циклов Необходимые средства для синхронизации обработки данных в OpenMP

Параллельные Гергель В.П Задания для самостоятельной работы Разработка параллельного метода для вычисления числа  при использовании интерфейса OpenMP

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

Параллельные Гергель В.П Следующая тема Методы разработки параллельных программ для многопроцессорных систем с общей памятью (стандарт OpenMP) – 2