Universität Karlsruhe (TH)

Ähnliche Dokumente
Master-Thread führt Programm aus, bis durch die Direktive

Beispiel: Schleifenparallelisierung

OpenMP - Threading- Spracherweiterung für C/C++ Matthias Klein, Michael Pötz Systemprogrammierung 15. Juni 2009

Parallel Regions und Work-Sharing Konstrukte

Universität Karlsruhe (TH)

Shared-Memory Programmiermodelle

OpenMP. Viktor Styrbul

Threads und OpenMP. Frank Mietke Cluster- & Gridcomputing Frank Mietke 7/4/04

Universität Karlsruhe (TH)

1. Einführung in OpenMP

Parallele Programmierung mit OpenMP

6. Der OpenMP Standard. Direktiven-basiertes API zur Programmierung von Parallelrechnern mit gemeinsamem Speicher für FORTRAN, C und C++

Universität Karlsruhe (TH)

Universität Karlsruhe (TH)

Programmieren mit OpenMP

Parallele Programmierung mit OpenMP

Parallele Programmierung mit OpenMP

Vorlesung Parallelrechner und Parallelprogrammierung, SoSe 2016

Praktikum Wissenschaftliches Rechnen

Jannis Beese, Universität Stuttgart, Ferienakademie 2009

Homogene Multi-Core-Prozessor-Architekturen

4. Parallelprogrammierung

OpenMP - Geschichte. 1997: OpenMP Version 1.0 für Fortran

OpenMP. Marco Nielinger. Westfälische Wilhelms-Universität Münster. Ausarbeitung. im Rahmen des Seminars Parallele Programmierung im SS03

Konzepte der parallelen Programmierung

OpenMP am Beispiel der Matrizenmultiplikation

Paralleles Höchstleistungsrechnen. Parallele Programmiermodelle I

Parallele Programmiermodelle I

Praktikum: Paralleles Programmieren für Geowissenschaftler

Parallelizing derivative calculations using OpenMP and ADOL-C

Rechnerarchitektur (RA)

OpenMP. Michael Westermann

Praktikum: Paralleles Programmieren für Geowissenschaftler

OpenMP Primer. Rechnerübung Rechnerarchitektur

2 SunHPC 2002, Einführung in OpenMP, Dieter an Mey

Parallele Programmierung in C++ mit OpenMP

Lehrstuhl für Datenverarbeitung. Technische Universität München. Leistungskurs C++ Multithreading

C++ atomics, Boost.Lookfree, Hazard-Pointers und die Thread-Hölle

Lehrstuhl für Datenverarbeitung. Technische Universität München. Leistungskurs C++ Multithreading

Einige Grundlagen zu OpenMP

Raytracing in GA mittels OpenACC. Michael Burger, M.Sc. FG Scientific Computing TU Darmstadt

C-to-CUDA-Compiler. Johannes Kölsch. October 29, 2012

Bayesian Networks. Syntax Semantics Parametrized Distributions Inference in Bayesian Networks. Exact Inference. Approximate Inference

Softwaretechnik 1 Übung 5

Data Structures and Algorithm Design

Evaluation. Einleitung. Implementierung Integration. Zusammenfassung Ausblick

ÜBUNGS-BLOCK 7 LÖSUNGEN

1 SunHPC 2002, Einführung in OpenMP, Dieter an Mey

I Grundlagen der parallelen Programmierung 1

Parallele Programmierung. Parallele Programmierung Memory-Rechner mit OpenMP

EINFÜHRUNG IN DIE PROGRAMMIERUNG

Lebenszyklus von Threads

Viktor Styrbul. Inhaltverzeichnis:

Computergrundlagen Moderne Rechnerarchitekturen

Computergrundlagen Moderne Rechnerarchitekturen

Projekt Parallelrechnerevaluation

Parallelisierung am AIU CPU Cluster GPU. Kevin Marco Erler AIU Jena

Betriebssysteme. Vorlesung im Herbstsemester 2010 Universität Mannheim. Kapitel 6: Speicherbasierte Prozessinteraktion

Order Ansicht Inhalt

Beispielvortrag: HPCG auf Intel Haswell-EP

Paralleles Programmieren mit OpenMP und MPI OpenMP-Übungsaufgaben Steinbuch Centre for Computing

Introduction FEM, 1D-Example

Parallele Algorithmen

Grundlagen MATLAB. Vorlesung Batteriemodellierung mit MATLAB

Betriebssysteme. G: Parallele Prozesse. (Teil B: Klassische Problemstellungen, Mutual Exclusion, kritische Regionen)

4. Parallelprogrammierung. AlDaBi Praktikum

Funktionale Konzepte in objektorientierten Sprachen LAMBDAS / CLOSURES

Logik für Informatiker Logic for computer scientists

Multicore Parallelismus! in modernen CPUs

Entscheidungen. INE1, Montag M. Thaler, Office TG ZHAW, M. Thaler, K. Rege, G. Burkert

JaMP Implementierung eines OpenMP Dialektes im DSM System Jackal

Warum parallele Programmierung?

Wintersemester 2009/10 Helmut Seidl Institut für Informatik TU München

Pthreads. David Klaftenegger. Seminar: Multicore Programmierung Sommersemester

4. Parallelprogrammierung

Memory Models Frederik Zipp

Parallele Rechenmodelle

Nicht-blockierende Synchronisation für Echtzeitsysteme

5. Parallelprogrammierung II und q-gram Indizes. AlDaBi Praktikum

Universität Karlsruhe (TH)

Matrix Transposition mit gaspi_read_notify. Vanessa End HPCN Workshop 11. Mai 2016

FACHHOCHSCHULE AUGSBURG Hochschule für Technik, Wirtschaft und Gestaltung

Stephan Brumme, SST, 3.FS, Matrikelnr

Parallele Systeme. 1 Einführung Durchführung der erweiterten Übung OpenMP... 3

Systeme I: Betriebssysteme Kapitel 4 Prozesse. Wolfram Burgard

Nebenläufige Programme mit Python

Übersicht. Nebenläufige Programmierung: Praxis und Semantik. Synchronisation (4) Eine untere Schranke für den Platzbedarf

Parallele und verteilte Programmierung

Javakurs für Anfänger

PONS DIE DREI??? FRAGEZEICHEN, ARCTIC ADVENTURE: ENGLISCH LERNEN MIT JUSTUS, PETER UND BOB

Kursbuch Naturheilverfahren: Curriculum der Weiterbildung zur Erlangung der Zusatzbezeichnung Naturheilverfahren (German Edition)

EINFÜHRUNG IN DIE PROGRAMMIERUNG

Algorithm Theory 3 Fast Fourier Transformation Christian Schindelhauer

Seminar: Multi-Core Architectures and Programming

Info B VL 17: Deadlocks

Multi- und Many-Core

Transkript:

Universität Karlsruhe (TH) Forschungsuniversität gegründet 1825 OpenMP-Programmierung Teil III Multikern-Praktikum Wintersemester 06-07

Inhalt Was ist OpenMP? Parallele Regionen Konstrukte zur Arbeitsteilung Sichtbarkeit / Schutz privater Daten Konstrukte zur Synchronisation Ablaufplanung bei Schleifen Andere nützliche Konstrukte Überlegungen zur Performanz Clauses / Directives- Zusammenfassung Umgebungsvariabeln 2

Überlegungen zur Performanz Wartende Kontrollfäden erledigen keine sinnvolle Arbeit. Die Arbeit sollte zwischen den Fäden so gleichmäßig wie möglich aufgeteilt werden. Die Kontrollfäden sollten die parallelen Aufgaben alle zur gleichen Zeit beenden. Synchronisation kann erforderlich sein. Jedoch: Die Zeit, in der ein Faden auf eine geschützte Ressource wartet, muss minimiert werden. 3

Ungleiche Lastverteilung (1) Ungleiche Verteilung der Aufgaben führt zu unausgelasteten Fäden und damit zu verlorener Rechenzeit. #pragma omp parallel { #pragma omp for for( ; ; ){ Zeit beschäftigt untätig } } 4

Ungleiche Lastverteilung (2) Lastbalancierung Static scheduling Gleiche Anzahl der Iterationsblöcke Basiert auf Schleifengrenzen zur Laufzeit Totalles paralleles scheduling OpenMP* default Dynamic und guided scheduling Die Threads erledigen ihre Arbeit und gehen zum nächsten Arbeitsblock. Aufwand für Schedulingalgorithmen. 5

Synchronisierungsaufwand (1) Verlorene Zeit beim Warten auf Ressourcen #pragma omp parallel { #pragma omp critical {... }... } Zeit beschäftigt untätig in krit. Abschnitt 6

Synchronisierungsaufwand (2) Methoden zur Verfeinerung der Synchronisation: Weniger Sperrkonkurenzen Unterschiedliche Namen für kritische Abschnitte Verwendung domainspezifischer Sperren Mergen paralleler Schleifen und entfernen der Barrieren Mergen kleiner kritischer Abschnitte Verschieben kritischer Abschnitte außerhalb der Schleifen Explizite Synchronisation void omp_init_lock(omp_lock_t *lock) void omp_set_lock(omp_lock_t *lock) void omp_unset_lock(omp_lock_t *lock) void omp_test_lock(omp_lock_t *lock) void omp_destroy_lock(omp_lock_t *lock) 7

Inhalt Was ist OpenMP? Parallele Regionen Konstrukte zur Arbeitsteilung Sichtbarkeit / Schutz privater Daten Konstrukte zur Synchronisation Ablaufplanung bei Schleifen Andere nützliche Konstrukte Überlegungen zur Performanz Clauses / Directives- Zusammenfassung Umgebungsvariabeln 8

Clauses / Directives- Zusammenfassung (1) Directive Clause PARALLEL DO/for SECTIONS SINGLE PARALLEL DO/for PARALLEL SECTIONS IF PRIVATE SHARED DEFAULT FIRSTPRIVATE LASTPRIVATE REDUCTION COPYIN SCHEDULE ORDERED NOWAIT 9

Clauses / Directives- Zusammenfassung (2) Die folgenden OpenMP-Direktive akzeptieren keine Klauseln: MASTER CRITICAL BARRIER ATOMIC FLUSH ORDERED THREADPRIVATE 10

Inhalt Was ist OpenMP? Parallele Regionen Konstrukte zur Arbeitsteilung Sichtbarkeit / Schutz privater Daten Konstrukte zur Synchronisation Ablaufplanung bei Schleifen Andere nützliche Konstrukte Überlegungen zur Performanz Clauses / Directives- Zusammenfassung Umgebungsvariabeln 11

Umgebungsvariabeln OMP_SCHEDULE set OMP_SCHEDULE "guided, 4 OMP_NUM_THREADS set OMP_NUM_THREADS 8 OMP_DYNAMIC Aktivieren und deaktivieren dynamischer Zuweisung von zu Ausführung stehenden Threads für parallele Regionen. set OMP_DYNAMIC TRUE OMP_NESTED Aktivieren und deaktivieren verschachtelter Parallelismus. set OMP_NESTED TRUE 12

OpenMP-Konstrukten 13

Zusammenfassung: Programmieren mit OpenMP OpenMP ist: Ein einfacher Ansatz für paralleles Programmieren für Systeme mit gemeinsamen Speicher. Grundlegende OpenMP-Konstrukte wurden vorgestellt: Erzeuge parallele Code-Abschnitte (omp parallel) Teile Arbeit (Schleifendurchläufe) auf mehrere Fäden auf (omp for) Lege Sichtbarkeiten für Variablen fest (omp private ) Synchronisiere (omp critical )... 14

Buckup Slides 15

Aufgabe 2: Matrix Multiplication Iterative, Row-oriented Algorithm Series of inner product (dot product) operations

Aufgabe 2: Matrix Multiplication Performance as n Increases :

Aufgabe 2: Matrix Multiplication Reason: Matrix B Gets Too Big for Cache Computing a row of C requires accessing every element of B

Aufgabe 2: Matrix Multiplication Block Matrix Multiplication: Replace scalar multiplication with matrix multiplication Replace scalar addition with matrix addition

Aufgabe 2: Matrix Multiplication Recurse Until B Small Enough :

Aufgabe 2: Matrix Multiplication Comparing Sequential Performance :

Aufgabe 3: Iterative Solvers (1) Iterative solvers: Jacobi vs. Gauß-Seidel for i=2 to n 1 do // Codefragment : Jacobi Algorithm for j=2 to n 1 do a_new [ i ] [ j ]= 1/4(a_old [ i 1] [ j ]+ a_old [ i ] [ j 1]+ a_old [ i +1] [ j ]+a_old [ i ] [ j +1]); end for end for for i=2 to n 1 do // Codefragment : Gauß Seidel Algorithm for j=2 to n 1 do a_new [ i ] [ j ]= ; 1/4( a_new [ i 1] [ j ]+a_new [ i ] [ j 1]+ a_old [ i +1] [ j ]+ a_old [ i ] [ j +1 ]) end for end for

Aufgabe 3: Iterative Solvers (2) Jacobi: new values are stored in a different location; + each thread performs only read operations on the initial matrix; + each thread performs write operations on the destination matrix only in its own space; after the computation the results need to be moved to the initial matrix. Gauß-Seidel: + new values are stored in the same location; many dependencies across and between iterations; + specific traversal rules allow very good parallelisation.