Intel Threading Building Blocks (TBB)



Ähnliche Dokumente
Implementation of a Framework Component for Processing Tasks within Threads on the Application Level

Einführung in die Programmierung

Die Java Stream API. Funktionale Programmierung mit der Stream API des JDK 1.8. Prof. Dr. Nikolaus Wulff

Proseminar Nichtsequentielle Programmiersprachen - alt und neu Einführung

Semantics of C++ Seminar im Wintersemester 2009/2010 Intel Threading Building Blocks

Algorithmik II. SS 2003 Prof. Dr. H. Stoyan Lehrstuhl für Informatik 8 ( Künstliche Intelligenz) stoyan@informatik.uni-erlangen.

Programmieren in C. Rekursive Funktionen. Prof. Dr. Nikolaus Wulff

Kontrollstrukturen - Universität Köln

Aufbau einer attraktiven Homepage für die Lehrveranstaltung für SBWL

Sortierverfahren für Felder (Listen)

Erwin Grüner

Funktionale Programmierung mit Haskell

C-Probeklausur (Informatik 1; Umfang: C, Teil 1; SS07)

Windows 7 Umsteiger Windows-Explorer

Simon die linke Hand des Handwerks

Automatisches Parallelisieren

1. Einführung. 2. Alternativen zu eigenen Auswertungen. 3. Erstellen eigener Tabellen-Auswertungen

Algorithmen II Vorlesung am

Übersicht. Nebenläufige Programmierung. Praxis und Semantik. Einleitung. Sequentielle und nebenläufige Programmierung. Warum ist. interessant?

Abschnitt: Algorithmendesign und Laufzeitanalyse

OpenMP am Beispiel der Matrizenmultiplikation

Rundung und Casting von Zahlen

Entwurf von Algorithmen - Kontrollstrukturen

Menü auf zwei Module verteilt (Joomla 3.4.0)

Sie können sich eine Kurzanleitung zum Fachmodul Heimarbeit im PDF-Format anzeigen lassen. Klicken Sie in der Menüspalte auf Hilfe > Hilfe anzeigen.

Informatik Grundlagen, WS04, Seminar 13

Gleichungen und Ungleichungen

4. Lernen von Entscheidungsbäumen. Klassifikation mit Entscheidungsbäumen. Entscheidungsbaum

DVB-S Empfangsgerät, Videorecorder und Fernseher (Fernseher mit zwei Scart- (oder HDMI-)Eingängen)

BTree.dll - Balancierte und verkettete Bäume. Ecofor. BTree.dll. Realisiert mit Microsoft Visual Studio /9

Mandanteninformation Die neue amtliche Muster-Widerrufsbelehrung Art Abs. 3 Satz 1 Anlage 1 EGBGB

Umfrageergebnisse zur wirtschaftlichen Situation von Coaches

1. Legen Sie die mitgelieferte CD in ihr Laufwerk des PC, diese startet dann automatisch mit folgenden Fenster, klicken Sie nun English an.

[ Experiment- und Datenprotokollierung. mit der EV3 Software]

1 topologisches Sortieren

Einzel- s und unpersönliche Massen-Mails versenden

Step by Step Softwareverteilung unter Novell. von Christian Bartl

Objektorientierte Programmierung

Lubuntu als Ersatz für Windows

Handbuch ECDL 2003 Modul 2: Computermanagement und Dateiverwaltung Der Task-Manager

Redaktionssystem E-MODE. Handbuch für RedakteurInnen. Inhalt. Informationen über E-MODE, Standards & Regeln:

Flächenvereinigung über DB-Attribut und Wertklassenbildung mit ToPas-Makro

Die ersten Schritte mit. DIG-CAD 5.0 Aufmaß

Bruchrechnung Wir teilen gerecht auf

Anleitung für die Online-Bewerbung über LSF auf Lehrveranstaltungen aller Lehramtsstudiengänge

Maximaler Fluß und minimaler Schnitt. Von Sebastian Thurm

Free your work. Free your work. Wir wollen Ihnen die Freiheit geben, sich auf Ihr Geschäft zu konzentrieren.

AutoSPARQL. Let Users Query Your Knowledge Base

Symbole und Schnittvorlagen aus

Grundlagen der Programmierung (Vorlesung 14)

Lehrpläne NRW Sek.stufe 2. Lernen im Kontext

Handhabung u. Lagerung von Leiterplatten

MAP CellSs Mapprakt3

Kopfzeile. Inhaltsverzeichnis

1) Farbsteuergerät in der Nikobus-Software unter Modul zufügen hinzufügen.

Die Komplexitätsklassen P und NP

Installation der Demoversion vom M-Doc AutoSigner

Einführung zum Arbeiten mit Microsoft Visual C Express Edition

Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen:

So gehts Schritt-für-Schritt-Anleitung

CBLOCK: An Automatic Blocking Mechanism for Large-Scale De-duplication Tasks. Cathleen Ramson, Stefan Lehmann LSDD SS

Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung)

Java-Applikationen sind Programme mit dem vollen Funktionsumfang eines normalen Programms mit gleicher Funktionalität.

Objektorientiertes Programmieren mit Suse Linux

Klausur in Programmieren

Durchdringungen von wärmetechnischen Anlagen durch Holzbauteile

Anleitung für Abfragen in der. Herold Online Marketing Datenbank

Leitfaden zur Prüfung der Aufbau- und Ablauforganisation sowie der technischen Sicherheit von Betreibern von Abwasseranlagen nach DWA-Merkblatt M 1000

Lineare Gleichungssysteme

Tritt beim Aufruf ein Fehler aus, so wird eine MessageBox mit dem Fehlercode und der Kommandozeile angezeigt.

Einfache Ausdrücke Datentypen Rekursive funktionale Sprache Franz Wotawa Institut für Softwaretechnologie

Datenexport mit orgamax

2.1. Fokus Struktur Einzelgespräche Team-Besprechungen Informelle Gespräche E-Kommunikation...

Kosten-Leistungsrechnung Rechenweg Optimales Produktionsprogramm

Hinweis. PKAntonitsch, 20. April 2002 (für kritische Rückmeldungen:

Die Tabellenvorlage im Katalog für Tabellen speichern... 2 Weiteres zu Schnellbausteinkatalogen EDV + Didaktik - Dr. Viola Vockrodt-Scholz

Anleitung OpenCms. Einfügen eines Template-Umschalters für den Wechsel zwischen mobiler und Dektop-Ansicht

Programmierung 2. Übersetzer: Code-Erzeugung. Sebastian Hack. Klaas Boesche. Sommersemester

Grafischer Tischeplan

Dokumentation PuSCH App. android phone

Mining High-Speed Data Streams

Modulare Programmierung und Bibliotheken

Softfolio Packlistenmanagement Benutzerdokumentation

GS-Buchhalter/GS-Office 2015 Saldovorträge in folgenden Wirtschaftsjahren erfassen

Programmieren. 10. Tutorium 4./ 5. Übungsblatt Referenzen

1 Einleitung. Lernziele. automatische Antworten bei Abwesenheit senden. Einstellungen für automatische Antworten Lerndauer. 4 Minuten.

Hilfen zur Verwendung der Word-Dokumentvorlage des BIS-Verlags

Maus & Tastatur Anleitungen für Merlin Project ProjectWizards

Referenzen TYPO3 Projekt Slider für Reiseberichte Stand: Februar 2015

Interrupt-Programmierung

Ferienakademie Programmierkonzepte für Multi-Core Rechner. Tools: Profiler

Gliederung. Definition Wichtige Aussagen und Sätze Algorithmen zum Finden von Starken Zusammenhangskomponenten

Anleitung zum Importieren, Durchführen und Auswerten von Umfragen in Blackboard

Einrichten einer Toolchain zur Programmierung des Nibo 2 Roboters mit Atmel Studio 6

Parallelisierung von NIDS

STLB-Bau Kundenmanager

Klausur GUI-Entwicklung WS10/11 1.Termin

Wasserfall-Ansätze zur Bildsegmentierung

Projektverwaltung Problem Lösung: Modulare Programmierung

Migration von statischen HTML Seiten

Transkript:

Intel Threading Building Blocks (TBB) Julius Adorf 26.10.2009 Seminar: Semantics of C++ TU München

Tejas und Jayhawk?

Intel Threading Building Blocks (TBB) Parallelisierung für C++ eine Bibliothek mittlerweile Open Source Bildnachweis: tbb01

Shared-Memory TBB sind für Shared-Memory-Architektur ausgelegt

Überblick Konzeptuelles Schleifen parallel Quicksort parallel Mergesort parallel

Abstraktionsebene Verwirklichung der Parallelisierung... mittels Threads Bildnachweis: srt01

Abstraktionsebene Parallelisierung aus Anwendersicht... oberhalb der Thread-Ebene unterhalb der Compiler-Ebene Bildnachweis: srt02

Eine Problemstellung Quadratzahlen berechnen einfache sequentielle Lösung parallele Lösung?

Hauptdarsteller Eingabebereich (= range) Aufgabe (= task) Algorithmus zur Parallelisierung (= algorithm)

Eingabebereich z.b. blocked range (ein Intervall) kann rekursiv geteilt werden eventuell selbst definieren

Aufgabe Aufgabe des Programmierers arbeitet sequentiell verarbeitet Eingabedaten in bestimmten Eingabebereich

Algorithmus sorgt für die parallele Ausführung nimmt Eingabedaten, Aufgabe, und Eingabebereich bereitgestellt von TBB

Überblick Konzeptuelles Schleifen parallel Quicksort parallel Mergesort parallel

Parallelisieren mit parallel for - Lösungsansatz Datensatz partitionieren Lastverteilung durch work stealing

parallel for - Vorbereitung 1 #i n c l u d e <i ostream > 2 #i n c l u d e tbb / t a s k s c h e d u l e r i n i t. h 3 #i n c l u d e tbb / p a r a l l e l f o r. h 4 #i n c l u d e tbb / b l o c k e d r a n g e. h 5 6 u s i n g namespace s t d ; 7 u s i n g namespace tbb ;

parallel for - Berechnung 9 v o i d p r i n t s q u a r e ( i n t n ) { 10 i n t n s q u a r e d = n n ; 11 p r i n t f ( %3 i squared i s %3 i \ r \n, n, n s q u a r e d ) ; 12 }

parallel for - Aufgabe 14 c l a s s C a l c u l a t e S q u a r e s { 15 16 i n t c o n s t i n p u t ; 17 18 p u b l i c : 19 v o i d o p e r a t o r ( ) ( c o n s t b l o c k e d r a n g e <s i z e t >& r ) c o n s t { 20 f o r ( s i z e t i = r. b e g i n ( ) ; i!= r. end ( ) ; i ++) { 21 p r i n t s q u a r e ( i n p u t [ i ] ) ; 22 } 23 } 24 25 C a l c u l a t e S q u a r e s ( i n t i n p u t [ ] ) : i n p u t ( i n p u t ) { } 26 } ;

parallel for - Aufruf 27 28 i n t main ( ) { 29 t a s k s c h e d u l e r i n i t i n i t ; // p r i o r to v2. 1 30 c o n s t i n t n = 1 0 ; 31 i n t i n p u t [ n ] = { 0, 1, 2, 3, 4, 10, 11, 12, 13, 21 } ; 32 p a r a l l e l f o r ( 33 b l o c k e d r a n g e <s i z e t >(0, n ), 34 C a l c u l a t e S q u a r e s ( i n p u t ) ) ; 35 }

TBB mit Lambda-Funktionen 14 //... d e f i n e p r i n t s q u a r e, i n c l u d e h e a d e r s... 15 i n t main ( ) { 16 t a s k s c h e d u l e r i n i t i n i t ( ) ; // p r i o r to v2. 1 17 c o n s t i n t n = 1 0 ; 18 i n t i n p u t [ n ] = { 0, 1, 2, 3, 4, 10, 11, 12, 13, 21 } ; 19 p a r a l l e l f o r ( 20 b l o c k e d r a n g e <s i z e t >(0, n ), 21 [ = ] ( c o n s t b l o c k e d r a n g e <s i z e t >& r ) { 22 f o r ( s i z e t i = r. b e g i n ( ) ; i!= r. end ( ) ; i ++) 23 p r i n t s q u a r e ( i n p u t [ i ] ) ; 24 } ) ; 25 } kommen 2010 mit C++0x-Standard Lambda-Funktionen unterstützt ab GCC 4.5

Algorithmen parallel for - Map parallel, Rekursion, Schleifenparallelität parallel reduce - Reduce parallel parallel scan - Präfix-Scan parallel parallel do - Map auf sequentiellem Iterator pipelining - Fließband parallel

Überblick Konzeptuelles Schleifen parallel Quicksort parallel Mergesort parallel

Quicksort parallelisieren Quicksort mit parallel for left, right = partition(array) quicksort(left); quicksort(right)

Quicksort parallelisieren Arbeit beim rekursiven Abstieg Rekursiv partitionieren - eigene Range-Klasse einführen Teilbereiche sequentiell sortieren - Aufgabe definieren

Quicksort - eigene Range-Klasse einführen 7 template <typename RandomAccessIterator, 8 typename Compare> 9 s t r u c t QuicksortRange { 10 11 R a n d o m A c c e s s I t e r a t o r b e g i n ; 12 s i z e t s i z e ; 13 c o n s t Compare &comp ; 14 15 b o o l empty ( ) c o n s t ; 16 b o o l i s d i v i s i b l e ( ) c o n s t ; 17 QuicksortRange ( QuicksortRange &, s p l i t ) ; 18 QuicksortRange ( R a n d o m A c c e s s I t e r a t o r b e g i n, 19 s i z e t s i z e, 20 Compare &comp ) ; 21 22 } ;

Quicksort - der Split-Konstruktor 37 // pseudo C++ 38 QuicksortRange ( QuicksortRange& o r i g, s p l i t ) { 39 i n t p = p a r t i t i o n ( o r i g. begin, o r i g. b e g i n+o r i g. s i z e ) ; 40 o r i g. s i z e = p ; 41 b e g i n = o r i g. b e g i n + p + 1 ; 42 s i z e = o r i g. s i z e p 1 ; 43 comp = o r i g. comp ; 44 }

Quicksort - Aufgabe definieren 23 24 template <typename RandomAccessIterator, 25 typename Compare> 26 s t r u c t q u i c k s o r t { 27 28 v o i d o p e r a t o r ( ) ( 29 c o n s t QuicksortRange <RandomAccessIterator, 30 Compare>& r ) c o n s t { 31 s o r t ( r. begin, r. b e g i n + r. s i z e, r. comp ) ; 32 } 33 34 } ;

Überblick Konzeptuelles Schleifen parallel Quicksort parallel Mergesort parallel

Mergesort parallel Typisch Divide-and-Conquer Arbeit beim rekursiven Aufstieg Geht weder mit parallel for noch mit parallel reduce

Mergesort direkt mit Tasks Task sind kleinste Arbeitspakete Anordnung der Tasks in einem Baum Abarbeitung mit Tiefensuche

Mergesort mit Tasks

9 s t r u c t SortTask : p u b l i c t a s k { 10 i n t begin, end ; 11 12 SortTask ( i n t b e g i n, i n t end ) : 13 b e g i n ( b e g i n ), end ( end ) { / nop / } 14 15 t a s k e x e c u t e ( ) { 16 s i z e t s i z e = end b e g i n ; 17 i f ( s i z e <= 32) { 18 s t d : : s o r t ( begin, end ) ; 19 } e l s e { 20 i n t median = b e g i n + s i z e / 2 ; 21 SortTask& s o r t l e f t = new ( a l l o c a t e c h i l d ( ) ) 22 SortTask ( begin, median ) ; 23 SortTask& s o r t r i g h t = new ( a l l o c a t e c h i l d ( ) ) 24 SortTask ( median, end ) ; 25 s e t r e f c o u n t ( 3 ) ; 26 spawn ( s o r t l e f t ) ; 27 s p a w n a n d w a i t f o r a l l ( s o r t r i g h t ) ; 28 i n p l a c e m e r g e ( begin, median, end ) ; 29 } 30 r e t u r n NULL ;

Mergesort parallel 33 34 v o i d m e r g e s o r t ( i n t begin, i n t end ) { 35 SortTask& s o r t = new ( t a s k : : a l l o c a t e r o o t ( ) ) 36 SortTask ( begin, end ) ; 37 t a s k : : s p a w n r o o t a n d w a i t ( s o r t ) ; 38 }

Mergesort parallel - Demo

Bilanz Schleifen parallelisiert Quicksort parallelisiert Mergesort parallelisiert angekratzt: parallel reduce, parallel do, parallel scan, pipeline

Fazit Verschachtelung von parallelen Abschnitten möglich Gut auch für nachträgliche Parallelisierung Programmierer behält Kontrolle Syntax gewöhnungsbedürftig Recht gute Dokumentation, viele Beispiele Bildnachweis: tbb01

Quellenangaben - Intel Threading Building Blocks James Reinders: Intel Threading Building Block, O Reilly, 2007 Deilmann, Mario and Willhalm, Thomas: Intel Threading Building Blocks - ein templatebasiertes Programmiermodell für moderne Mehrkehrnarchitekturen, LinuxMagazin, Mai 2007 Popovici, Nicolae und Willhalm, Thomas: Putting Intel Threading Building Blocks to Work, Proceedings of the 1st international workshop on Multicore software engineering, http://portal.acm.org/citation.cfm?id=1370085, 2008 Helmut Erlenkötter: C++, Rowohlt, 2005 http://software.intel.com/en-us/blogs/author/kevin-farnham/ http://entwickler.de/zonen/portale/psecom,id,99,news,37123,p,0.html http://gcc.gnu.org/projects/cxx0x.html http://software.intel.com/en-us/blogs/2007/11/21/parallel do-a-new-threading-building-blockscomponent/ http://software.intel.com/en-us/blogs/2009/08/03/parallel for-is-easier-with-lambdas-intel-threadingbuilding-blocks/ http://software.intel.com/en-us/blogs/2009/08/03/hello-lambdas-c-0x-a-quick-guide-to-lambdas-in-c/ http://software.intel.com/en-us/articles/intel-threading-building-blocks-openmp-or-native-threads/ http://www.research.att.com/ bs/dne.html http://www.threadingbuildingblocks.org/

Quellenangaben - Grafiken Alle Grafiken, die hier nicht in den Angaben auftauchen, sind selbst erstellt oder stehen zur freien Verfügung. tbb01 Ausschnitt der Seite http://www.threadingbuildingblocks.org/ (August 2009) srt01 von Schrottie http://www.flickr.com/photos/schrottie/3755566450/ srt02 von Schrottie http://www.flickr.com/photos/schrottie/3755566450/ (auf dieser Seite angepasst)

Zusätzliches Material

Benchmark Suche nach Substring Rechner mit Dual-Core-Prozessor

Benchmark Suche nach Substring Rechner mit Dual-Core-Prozessor