NewsFlash!! Earth Simulator no longer #1. In slightly less earthshaking news… Homework #1 due date postponed to 10/11.

Slides:



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

OpenMP.
Parallel Processing with OpenMP
Introduction to Openmp & openACC
Introductions to Parallel Programming Using OpenMP
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.
PARALLEL PROGRAMMING WITH OPENMP Ing. Andrea Marongiu
1 OpenMP—An API for Shared Memory Programming Slides are based on:
1 Tuesday, November 07, 2006 “If anything can go wrong, it will.” -Murphy’s Law.
DISTRIBUTED AND HIGH-PERFORMANCE COMPUTING CHAPTER 7: SHARED MEMORY PARALLEL PROGRAMMING.
Computer Architecture II 1 Computer architecture II Programming: POSIX Threads OpenMP.
Introduction to OpenMP For a more detailed tutorial see: Look at the presentations.
1 ITCS4145/5145, Parallel Programming B. Wilkinson Feb 21, 2012 Programming with Shared Memory Introduction to OpenMP.
OpenMPI Majdi Baddourah
INTEL CONFIDENTIAL OpenMP for Domain Decomposition Introduction to Parallel Programming – Part 5.
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.
Budapest, November st ALADIN maintenance and phasing workshop Short introduction to OpenMP Jure Jerman, Environmental Agency of Slovenia.
CS240A, T. Yang, 2013 Modified from Demmel/Yelick’s and Mary Hall’s Slides 1 Parallel Programming with OpenMP.
Programming with Shared Memory Introduction to OpenMP
CS470/570 Lecture 5 Introduction to OpenMP Compute Pi example OpenMP directives and options.
Shared Memory Parallelization Outline What is shared memory parallelization? OpenMP Fractal Example False Sharing Variable scoping Examples on sharing.
1 Copyright © 2010, Elsevier Inc. All rights Reserved Chapter 5 Shared Memory Programming with OpenMP An Introduction to Parallel Programming Peter Pacheco.
Shared Memory Parallelism - OpenMP Sathish Vadhiyar Credits/Sources: OpenMP C/C++ standard (openmp.org) OpenMP tutorial (
CC02 – Parallel Programming Using OpenMP 1 of 25 PhUSE 2011 Aniruddha Deshmukh Cytel Inc.
Parallel Programming in Java with Shared Memory Directives.
Lecture 5: Shared-memory Computing with Open MP. Shared Memory Computing.
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ı
1 OpenMP Writing programs that use OpenMP. Using OpenMP to parallelize many serial for loops with only small changes to the source code. Task parallelism.
Introduction to OpenMP. OpenMP Introduction Credits:
OpenMP – Introduction* *UHEM yaz çalıştayı notlarından derlenmiştir. (uhem.itu.edu.tr)
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
High-Performance Parallel Scientific Computing 2008 Purdue University OpenMP Tutorial Seung-Jai Min School of Electrical and Computer.
09/08/2011CS4961 CS4961 Parallel Programming Lecture 6: More OpenMP, Introduction to Data Parallel Algorithms Mary Hall September 8, 2011.
Introduction to OpenMP
Parallel Programming 0024 Week 10 Thomas Gross Spring Semester 2010 May 20, 2010.
Introduction to OpenMP Eric Aubanel Advanced Computational Research Laboratory Faculty of Computer Science, UNB Fredericton, New Brunswick.
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 (
MPI and OpenMP.
Threaded Programming Lecture 2: Introduction to OpenMP.
3/12/2013Computer Engg, IIT(BHU)1 OpenMP-1. OpenMP is a portable, multiprocessing API for shared memory computers OpenMP is not a “language” Instead,
Special Topics in Computer Engineering OpenMP* Essentials * Open Multi-Processing.
CPE779: Shared Memory and OpenMP Based on slides by Laxmikant V. Kale and David Padua of the University of Illinois.
CS240A, T. Yang, Parallel Programming with OpenMP.
Introduction to OpenMP
SHARED MEMORY PROGRAMMING WITH OpenMP
Shared Memory Parallelism - OpenMP
Lecture 5: Shared-memory Computing with Open MP
SHARED MEMORY PROGRAMMING WITH OpenMP
CS427 Multicore Architecture and Parallel Computing
Open[M]ulti[P]rocessing
Computer Engg, IIT(BHU)
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.
Multi-core CPU Computing Straightforward with OpenMP
Parallel Programming with OpenMP
CS4961 Parallel Programming Lecture 5: More OpenMP, Introduction to Data Parallel Algorithms Mary Hall September 4, /04/2012 CS4230.
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.
Introduction to High Performance Computing Lecture 20
Programming with Shared Memory Introduction to OpenMP
Introduction to OpenMP
OpenMP Parallel Programming
Presentation transcript:

NewsFlash!! Earth Simulator no longer #1

In slightly less earthshaking news… Homework #1 due date postponed to 10/11

OpenMP Overview: What is OpenMP? Model for parallel programming Shared-memory parallelism Portable across shared-memory architectures Scalable Incremental parallelization Compiler based Extensions to existing programming languages –mainly by directives –a few library routines Fortran and C/C++ binding Supports data parallelism

Motivation: why should I use OpenMP?

Where should I use OpenMP?

Simple OpenMP Program Most OpenMP constructs are compiler directives or pragmas The focus of OpenMP is to parallelize loops OpenMP offers an incremental approach to parallelism

Outline Standardization Body: Who owns OpenMP? OpenMP Application Program Interface (API) Execution Model – Parallel regions: team of threads – Syntax – Data environment (part 1) – Environment variables – Runtime library routines Work-sharing directives – Which thread executes which statement or operation? – Synchronization constructs, e.g., critical sections Data environment and combined constructs – Private and shared variables – Combined parallel work-sharing directives Summary of OpenMP API

OpenMP Information OpenMP Homepage: OpenMP sources on course webpage: A User's Guide to MPI by Peter Pacheco (pdf)(pdf) Introduction to OpenMP - tutorial from WOMPEI 2000 (link)(link) Writing and Tuning OpenMP Programs on Distributed Shared Memory Machines (link)(link) R.Chandra, L. Dagum, D. Kohr, D. Maydan, J. McDonald, R. Menon: Parallel programming in OpenMP. Academic Press, San Diego, USA, 2000, ISBN R. Eigenmann, Michael J. Voss (Eds): OpenMP Shared Memory Parallel Programming. Springer LNCS 2104, Berlin, 2001, ISBN X

OpenMP Programming Model OpenMP is a shared memory model. Workload is distributed between threads – Variables can be shared among all threads duplicated for each thread – Threads communicate by sharing variables Unintended sharing of data can lead to race conditions: – race condition: when the program’s outcome changes as the threads are scheduled differently. To control race conditions: – Use synchronization to protect data conflicts. Careless use of synchronization can lead to dead-locks

OpenMP Execution Model Fork-join model of parallel execution Begin execution as a single process (master thread) Start of a parallel construct: Master thread creates team of threads Completion of a parallel construct: Threads in the team synchronize: implicit barrier Only master thread continues execution

OpenMP Execution Model

OpenMP parallel region construct Block of code to be executed by multiple threads in parallel Each thread executes the same code redundantly! C/C++: #pragma omp parallel [ clause [ clause ]... ] new- line structured-block clause can be one of the following: private( list) shared( list)

OpenMP parallel region construct

OpenMP directive format C #pragma directives Format: #pragma omp directive_name [ clause [ clause ]... ] new-line Conditional compilation #ifdef _OPENMP block, e.g., printf(“%d avail.processors\n”,omp_get_num_procs()); #endif case sensitive Include file for library routines: #ifdef _OPENMP #include #endif

OpenMP data scope clauses private ( list ) Declares the variables in list to be private to each thread in a team shared ( list ) Makes variables that appear in list shared among all the threads in a team If not specified: default shared, but – stack (local) variables in called sub-programs are PRIVATE – Loop control variable of parallel OMP DO (Fortran) for (C) is PRIVATE

OpenMP environment variables OMP_NUM_THREADS – sets the number of threads to use during execution – when dynamic adjustment of the number of threads is enabled, the value of this environment variable is the maximum number of threads to use setenv OMP_NUM_THREADS 16 [csh, tcsh] export OMP_NUM_THREADS=16 [sh, ksh, bash] OMP_SCHEDULE – applies only to do/for and parallel do/for directives that have the schedule type RUNTIME – sets schedule type and chunk size for all such loops setenv OMP_SCHEDULE GUIDED,4 [csh, tcsh] export OMP_SCHEDULE= GUIDED,4 [sh, ksh, bash]

OpenMP runtime library Query functions Runtime functions – Run mode – Nested parallelism Lock functions C/C++: add #include

OpenMP runtime library omp_get_num_threads Function Returns the number of threads currently in the team executing the parallel region from which it is called – C/C++: int omp_get_num_threads(void); omp_get_thread_num Function Returns the thread number, within the team, that lies between 0 and omp_get_num_threads()-1, inclusive. The master thread of the team is thread 0 – C/C++: int omp_get_thread_num(void);

Work sharing directives Which thread executes which statement or operation? and when? – Work-sharing constructs – Master and synchronization constructs i.e., organization of the parallel work!!!

OpenMP work sharing constructs Divide the execution of the enclosed code region among the members of the team Must be enclosed dynamically within a parallel region They do not launch new threads No implied barrier on entry sections directive do directive (Fortran) for directive (C/C++)

OpenMP sections directive Several blocks are executed in parallel C/C++: #pragma omp sections [ clause [ clause ]... ] new-line { [#pragma omp section new-line ] structured-block1 [#pragma omp section new-line structured-block2 ]... }

OpenMP sections directive #pragma omp parallel { #pragma omp sections {{ a=...; b=...; } #pragma omp section { c=...; d=...; } #pragma omp section { e=...; f=...; } #pragma omp section { g=...; h=...; } } /*omp end sections*/ } /*omp end parallel*/

OpenMP for directive Immediately following loop executed in parallel C/C++: #pragma omp for [ clause [ clause ]... ] new-line for-loop

OpenMP for directive #pragma omp parallel private(f) { f=7; #pragma omp for for (i=0; i<20; i++) a[i] = b[i] + f * (i+1); } /* omp end parallel */

OpenMP for directive clause can be one of the following: private( list) [see later: Data Model] reduction( operator: list) [see later: Data Model] schedule( type [, chunk ] ) nowait (C/C++: on #pragma omp for) Implicit barrier at the end of do/for unless nowait is specified If nowait is specified, threads do not synchronize at the end of the parallel loop schedule clause specifies how iterations of the loop are divided among the threads of the team. – Default is implementation dependent

OpenMP schedule clause Within schedule( type [, chunk ] ) type can be one of the following: static: Iterations are divided into pieces of a size specified by chunk. The pieces are statically assigned to threads in the team in a roundrobin fashion in the order of the thread number. Default chunk size: one contiguous piece for each thread. dynamic: Iterations are broken into pieces of a size specified by chunk. As each thread finishes a piece of the iteration space, it dynamically obtains the next set of iterations. Default chunk size: 1. guided: The chunk size is reduced in an exponentially decreasing manner with each dispatched piece of the iteration space. chunk specifies the smallest piece (except possibly the last). Default chunk size: 1. Initial chunk size is implementation dependent. runtime: The decision regarding scheduling is deferred until run time. The schedule type and chunk size can be chosen at run time by setting the OMP_SCHEDULE environment variable. Default schedule: implementation dependent.

Loop scheduling

OpenMP synchronization Implicit Barrier – beginning and end of parallel constructs – end of all other control constructs – implicit synchronization can be removed with nowait clause Explicit critical

OpenMP critical directive Enclosed code – executed by all threads, but – restricted to only one thread at a time C/C++: #pragma omp critical [ ( name ) ] new-line structured-block A thread waits at the beginning of a critical region until no other thread in the team is executing a critical region with the same name. All unnamed critical directives map to the same unspecified name.

OpenMP critical C / C++: cnt = 0; f=7; #pragma omp parallel { #pragma omp for for (i=0; i<20; i++) { if (b[i] == 0) { #pragma omp critical cnt ++; } /* endif */ a[i] = b[i] + f * (i+1); } /* end for */ } /*omp end parallel */

OpenMP control structures - summary Parallel region construct parallel Work-sharing constructs sections do (Fortran) for (C/C++) Combined parallel work-sharing constructs [see later] parallel do (Fortran) parallel for (C/C++) Synchronization constructs critical

OpenMP data scope clauses private ( list ) Declares the variables in list to be private to each thread in a team shared ( list ) Makes variables that appear in list shared among all the threads in a team If not specified: default shared, but – stack (local) variables in called subroutines are PRIVATE – Automatic variables within a block are PRIVATE – Loop control variable of parallel OMP DO (Fortran) FOR (C) is PRIVATE