Parallel Regions und Work-Sharing Konstrukte

Ähnliche Dokumente
OpenMP. Viktor Styrbul

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

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

Universität Karlsruhe (TH)

Beispiel: Schleifenparallelisierung

Shared-Memory Programmiermodelle

1. Einführung in OpenMP

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

Parallele Programmierung mit OpenMP

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

Vorlesung Parallelrechner und Parallelprogrammierung, SoSe 2016

Praktikum: Paralleles Programmieren für Geowissenschaftler

OpenMP. Michael Westermann

Jannis Beese, Universität Stuttgart, Ferienakademie 2009

Parallele Programmierung mit OpenMP

Viktor Styrbul. Inhaltverzeichnis:

Praktikum: Paralleles Programmieren für Geowissenschaftler

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

Rechnerarchitektur (RA)

Programmieren mit OpenMP

Einige Grundlagen zu OpenMP

Universität Karlsruhe (TH)

Universität Karlsruhe (TH)

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

Konzepte der parallelen Programmierung

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

Intel Thread Checker

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

Parallele Programmierung in C++ mit OpenMP

JaMP Implementierung eines OpenMP Dialektes im DSM System Jackal

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

Parallele Programmierung. Parallele Programmierung Memory-Rechner mit OpenMP

Universität Karlsruhe (TH)

Praktikum Wissenschaftliches Rechnen

4. Parallelprogrammierung. AlDaBi Praktikum

Universität Karlsruhe (TH)

OpenMP Primer. Rechnerübung Rechnerarchitektur

Parallele Programmierung mit OpenMP

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

Hochleistungsrechnen mit Windows Verifikations- und Analyseprogramme Christian Terboven Rechen- und Kommunikationszentrum RWTH Aachen

4. Parallelprogrammierung

Parallele Programmiermodelle

Homogene Multi-Core-Prozessor-Architekturen

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

Multicore Parallelismus! in modernen CPUs

Shared-Memory Parallelisierung von C++ Programmen

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

Parallele Programmierung mit OpenMP und MPI

Warum parallele Programmierung?

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

Parallel Computing. Einsatzmöglichkeiten und Grenzen. Prof. Dr. Nikolaus Wulff

4. Parallelprogrammierung

Computergrundlagen Moderne Rechnerarchitekturen

Computergrundlagen Moderne Rechnerarchitekturen

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

Automatische Parallelisierung

Projekt Parallelrechnerevaluation

4. Parallelprogrammierung

Christopher Schleiden

Lebenszyklus von Threads

Parallelisierung der Vektoraddition 149

Parallel Processing in a Nutshell OpenMP & MPI kurz vorgestellt

Computational Engineering I

Parallel Computing. Einsatzmöglichkeiten und Grenzen. Prof. Dr. Nikolaus Wulff

Modellierung von Echtzeitsystemen

I Grundlagen der parallelen Programmierung 1

2 Rechnerarchitekturen

Kontrollstrukturen -- Schleifen und Wiederholungen


Bild Nummer 1: Bild Nummer 2: Seite B 1

Multi-threaded Programming with Cilk

Paralleles Höchstleistungsrechnen. Parallele Programmiermodelle I

Weitere Extras. Datentypen selbstgemacht


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

Parallele Algorithmen

PGI Accelerator Model

Info B VL 16: Monitore und Semaphoren

Parallele Programmiermodelle I

Seminar: Multi-Core Architectures and Programming

OpenMP am Beispiel der Matrizenmultiplikation

Paralleles Programmieren mit MPI und OpenMP

1 Maschinenunabhängige Optimierungen. Maschinenunabhängige Optimierungen Wintersemester 2008/09 1 / 17

4. Parallelprogrammierung AlDaBi Prak4kum

Parallelisierung eines Lagrange schen Partikelausbreitungsmodells

Parallelverarbeitung

1.1 Merkmale von OpenMP

Bedingte Anweisungen

Platzierung von OpenMP-Programmen auf hierarchischen Speicherarchitekturen

Javakurs für Fortgeschrittene

Aufgaben zum Thema Verklemmungen

Interruptverarbeitung

Cilk Sprache für Parallelprogrammierung. IPD Snelting, Lehrstuhl für Programmierparadigmen

Hochleistungsrechnen Hybride Parallele Programmierung. Prof. Dr. Thomas Ludwig Universität Hamburg Informatik Wissenschaftliches Rechnen

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

Transkript:

Parallel Regions und Work-Sharing Konstrukte Um eine Parallelisierung von größeren Programmabschnitten, als es einzelne Schleifen sind, zu ermöglichen, stellt OpenMP als allgemeinstes Konzept die Parallel Regions Konstruktion zur Verfügung. Die entsprechende Direktive lautet in Fortran-90 und in C!$omp parallel clause[, [clause... #pragma omp parallel [clause [clause... { } wobei clause eine der Optionen private(list) shared(list) default(private shared none) firstprivate(list) reduction(operator:list) if(expr) (mit derselben Bedeutung wie bei der parallel do/for Direktive) sein kann. Durch diese Konstruktion werden zusätzlich zu dem bis zu diesem Zeitpunkt allein aktiven Master Thread (dem normalen seriellen Programmablauf) eine Anzahl von parallelen Slave Threads erzeugt, die ebenfalls den durch die parallel Direktive eingeschlossenen Programm ausführen. Die Gesamtzahl (Master+Slaves) der Mitglieder dieses Team of Threads ist durch den Wert der Umgebungsvariablen OMP NUM THREADS gegeben und kann durch die Prozedur omp set num threads zur Laufzeit verändert werden. Das Ende der parallel Direktive stellt einen impliziten Synchronisationspunkt dar: Erst wenn alle Threads mit der Ausführung ihres Exemplars des Programms fertig sind, werden die Slave Threads beendet, und die Kontrolle des Programmablaufs geht wieder allein an den Master Thread über. Threads werden in OpenMP durch laufende Nummern identifiziert, beginnend mit 0, d.h. der Master Thread hat immer die Nummer 0, während die Slave Threads die Nummern 1, 2, 3, erhalten. 7

Master Slaves 0 1 2 3!$omp parallel Programmfluß Die parallel Direktive bewirkt zunächst nur, daß der in der Parallel Region enthaltene Code so oft vervielfacht und unabhängig ausgeführt wird, wie Threads vorhanden sind. Da dies nicht zu einer Beschleunigung, sondern zu einer Erhöhung das Rechenaufwandes führen würde, sind in OpenMP drei Work-Sharing Konstrukte vorgesehen, mit deren Hilfe die Ausführung von Teilabschnitten 1 der Parallel Region nicht-redundant auf die Threads aufgeteilt werden kann: die do/for Direktive, die sections Direktive und die single Direktive. Die do/for Direktive hat in Fortran-90 die Gestalt [clause[, [clause... do-loop [nowait #pragma omp for [clause [clause... for-loop wo clause eine der Optionen private, firstprivate, lastprivate, reduction, ordered oder schedule ist (in C auch nowait). Genauso wie bei der parallel do/for Direktive wird dadurch eine Aufteilung der Schleifeniterationen auf die Threads bewerkstelligt, sodaß Master und Slaves nicht mehr alle Schleifendurchgänge, sondern nur je einen Teil der Iterationen ausführen. Die frühere parallel do/for Direktive kann demnach als Kurzform für 1 Diese müssen nicht textuell innerhalb der Parallel Region stehen, sondern können sich z.b. auch in einem daraus aufgerufenen Unterprogramm befinden; man bezeichnet sie dann als verwaiste (orphaned) Konstrukte. 8

!$omp parallel do-loop angesehen werden. Einzelne Schleifen lassen sich im Prinzip auf jede der beiden Arten parallelisieren. Der Vorteil der do/for gegenüber der kombinierten parallel do/for Direktive liegt jedoch darin, daß bei Parallelisierung mehrerer Schleifen innerhalb ein und derselben Parallel Region der Aufwand zur Erzeugung und Beendigung der Slave Threads nur einmal anfällt:!$omp parallel do-loop 1 do-loop 2 Das Ende jeder do/for Direktive stellt einen impliziten Synchronisationspunkt dar, an dem die Threads warten müssen, bis alle Mitglieder des Teams ihre Schleifendurchgänge beendet haben. Soll am Ende der Schleife keine Synchronisation stattfinden, ist die nowait Option anzugeben. Die sections Direktive hat in Fortran-90 die Gestalt!$omp sections clause[, [clause... [!$omp section [!$omp section!$omp end sections [nowait #pragma omp sections [clause [clause... { [#pragma omp section 9

} [#pragma omp section wo clause eine der Optionen private, firstprivate, lastprivate oder reduction (in C auch nowait) ist. Durch diese Konstruktion werden die Programmabschnitte, section 2 usw. verschiedenen Threads zugeteilt, sodaß jeder Abschnitt nicht redundant, sondern nur genau einmal ausgeführt wird. Welcher Abschnitt von welchem Thread ausgeführt wird, ist allerdings implementations- und laufzeitabhängig. Sind weniger Abschnitte als Threads vorhanden, bleiben einzelne Threads unbeschäftigt; ist umgekehrt die Anzahl der Abschnitte größer als die Zahl der Threads, müssen manche Threads mehrere Abschnitte ausführen. Das Ende (aber nicht der Anfang) der sections Direktive stellt einen impliziten Synchronisationspunkt dar, der durch die Option nowait unterdrückt werden kann. Wie bei der parallel do/for Direktive gibt es auch hier eine kombinierte Konstruktion!$omp parallel sections [!$omp section [!$omp section sections Die single Direktive hat in Fortran-90 die Gestalt!$omp single [clause[, [clause...!$omp end single [nowait #pragma omp single [clause [clause... wo clause eine der Optionen private oder firstprivate (in C auch nowait) ist. Bei Verwendung dieser Konstruktion in einer Parallel Region wird erreicht, daß der eingeschlossene Programm nur von einem einzigen Thread ausgeführt wird, wobei gleichgültig ist, welcher Thread das ist. Ein typischer Anwendungsfall sind I/O-Operationen, die in der Regel nur von einem Thread ausgeführt werden sollen. Das Ende (aber nicht der Anfang) der single Direktive ist ebenfalls ein impliziter Synchronisationspunkt, der wieder durch die nowait Option unterdrückt werden kann. Obwohl es sich dabei um kein Work-Sharing Konstrukt im eigentlichen Sinn handelt, hat eine ähnliche Funktion die master Direktive 10

!$omp master!$omp end master #pragma omp master Der eingeschlossene Programm wird nur vom Master Thread ausgeführt, von den übrigen Threads aber übersprungen. Im Gegensatz zum single Konstrukt findet am Ende der master Direktive keine implizite Synchronisation statt. 11