Multi-threaded Programming with Cilk

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

OpenCL. Programmiersprachen im Multicore-Zeitalter. Tim Wiersdörfer

OpenMP. Viktor Styrbul

Multi- und Many-Core

CUDA. Moritz Wild, Jan-Hugo Lupp. Seminar Multi-Core Architectures and Programming. Friedrich-Alexander-Universität Erlangen-Nürnberg

Memory Models Frederik Zipp

2 Rechnerarchitekturen

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

Evaluation. Einleitung. Implementierung Integration. Zusammenfassung Ausblick

Computergrundlagen Moderne Rechnerarchitekturen

Einige Grundlagen zu OpenMP

> High-Level Programmierung heterogener paralleler Systeme

Parallele und verteilte Programmierung

Parallele Programmiermodelle

Beispielvortrag: HPCG auf Intel Haswell-EP

Kapitel 1 Parallele Modelle Wie rechnet man parallel?

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

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

RST-Labor WS06/07 GPGPU. General Purpose Computation On Graphics Processing Units. (Grafikkarten-Programmierung) Von: Marc Blunck

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

High-Performance Computing mit FEMAG

Projektseminar Parallele Programmierung

General Purpose Computation on GPUs

Nebenläufige Programme mit Python

2. Der ParaNut-Prozessor "Parallel and more than just another CPU core"

Optimierungen der Lattice Boltzmann Methode auf x86-64 basierten Architekturen

Compute Unified Device Architecture CUDA

Mehrprozessorarchitekturen

Programmierung von Many-Cores. Seminar: Software Engineering für Exascale Computing

Tutorium Softwaretechnik I

Automatische Parallelisierung

Ibis. Jan Frederik Naujoks

Beispiel: Schleifenparallelisierung

EINFÜHRUNG IN DIE PROGRAMMIERUNG

Interaktive Globale Beleuchtung nach dem Antiradiance-Verfahren mittels der Open Computing Language (OpenCL)

Cell Broadband Engine & CellSs: ein Programmiermodel für den Cell Prozessor

Visualisierung paralleler bzw. verteilter Programme

Systeme I: Betriebssysteme Kapitel 4 Prozesse. Wolfram Burgard

1. Einführung in OpenMP

Seminarvortrag: Direktivenbasierte Programmierung von Beschleunigern mit OpenMP 4.5 und OpenACC 2.5 im Vergleich

PRIP-Preis. Effizientes Object Tracking durch Programmierung von Mehrkernprozessoren und Grafikkarten

C++ Teil 5. Sven Groß. 16. Nov Sven Groß (IGPM, RWTH Aachen) C++ Teil Nov / 16

MSDN Webcast: Parallelprogrammierung mit der Task Parallel Library für.net (Teil 1) Presenter: Bernd Marquardt

Betriebssysteme und Microkern

Organisatorisches Einführung Quellen. Einführung. Praktikum C-Programmierung. Eugen Betke, Nathanael Hübbe, Michael Kuhn, Jakob Lüttgau, Jannek Squar

High Performance Computing

Crashkurs C++ - Teil 1

Motivation (GP)GPU CUDA Zusammenfassung. CUDA und Python. Christian Wilms. Integriertes Seminar Projekt Bildverarbeitung

Fakultät für Informatik der Technischen Universität München. Kapitel 3. Nebenläufigkeit

II.1.1. Erste Schritte - 1 -

Cell and Larrabee Microarchitecture

Vorlesung: Rechnerstrukturen, Teil 2 (Modul IP7)

Einleitung Typsystem Typisierung Zusammenfassung Literatur. Typisierung. Effiziente Programmierung. Thomas Schnieders

Dynamische Programmierung. Problemlösungsstrategie der Informatik

Kick-Off Paralleles Programmieren

Shared-Memory Programmiermodelle

Funktionale Programmiersprachen

Universität Karlsruhe (TH)

Entwicklung algorithmischer Skelette für CUDA am Beispiel von Affintiy Propagation

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

h.o.-computer news 20 Jahre ho-computer Die Party geht weiter Jubiläumsrabatt auf alle Intel-Softwareprodukte bis zum 20. Dezember

Konzepte der parallelen Programmierung

Inhalt. Einführung in die Strukturierte Programmierung 15

Jannis Beese, Universität Stuttgart, Ferienakademie 2009

verschiedenen Recheneinheiten, die miteinander kommunizieren können

Probestudium. Paralleles Programmieren für moderne Multicore-Prozessoren. Prof. Dr. Hans Jürgen Ohlbach

Objektorientierte Programmierung (ZQ1u2B)

II.1.1. Erste Schritte - 1 -

Unicode Support Atomic Operations Thread Support Type-Generic Makros Sicherheit Ease-of-Use C11. Thomas Duckardt

PostgreSQL auf vielen CPUs. Hans-Jürgen Schönig Hans-Jürgen Schönig

Datenstrukturen und Algorithmen

RO-Tutorien 15 und 16

Objektorientierte Programmierung. Agenda für heute, 1. April, Eines der drei wichtigsten Programmierparadigmen

EINFÜHRUNG IN DIE PROGRAMMIERUNG

II. Grundlagen der Programmierung. Beispiel: Merge Sort. Beispiel: Merge Sort (Forts. ) Beispiel: Merge Sort (Forts. )

Hello World! Eine Einführung in das Programmieren Das erste Programm

UNABHÄNGIGER LASTEN. Vorlesung 9 BALANCIERUNG DYNAMISCHER. Graphenalgorithmen und lineare Algebra Hand in Hand

Grafikkarten-Architektur

Programming Models for Cell BE

Hochleistungsrechnen auf dem PC

Futures, Scheduling and Work Distribution

OpenCL. Multi-Core Architectures and Programming (Seminar) Apelt, Nicolas / Zöllner, Christian

Paralleles Rechnen. (Architektur verteilter Systeme) von Thomas Offermann Philipp Tommek Dominik Pich

Leistungsfähige ARM CPUs für den industriellen Einsatz

Datenstrukturen und Algorithmen

1 Konzepte der Parallelverarbeitung

Einführung Datentypen Verzweigung Schleifen. Java Crashkurs. Kim-Manuel Klein May 4, 2015

Probeklausur: Programmierung WS04/05

Programmierung 1 für Wirtschaftsinformatik Wintersemester 2015/16

Homogene Multi-Core-Prozessor-Architekturen

PGI Accelerator Model

Vorstellung der SUN Rock-Architektur

Einführung in die Parallele Programmierung

Programmieren in Lua

II.1.1. Erste Schritte - 1 -

Einführung in die Programmierung I. 1.0 EBNF 2.0 Einfache Java Programme. Thomas R. Gross. Department Informatik ETH Zürich

Transkript:

Multi-threaded Programming with Cilk Hobli Taffame Institut für Informatik Ruprecht-Karls Universität Heidelberg 3. Juli 2013 1 / 27

Inhaltsverzeichnis 1 Einleitung Warum Multithreading? Ziele 2 Was ist Cilk? Cilk für Multithreading Wie funktioniert Cilk? Multithreaded Computation 3 Performance Work, Span, Speedup 4 Scheduler und Work-stealing Scheduler Work-stealing 5 Zusammenfassung 2 / 27

Einleitung Warum Multithreading? Warum Multi-Core? Abbildung: Graphik zur Belegung des mooreschen Gesetzes Quelle:http://de.wikipedia.org/wiki/Mooresches_Gesetz 3 / 27

Einleitung Warum Multithreading? Warum Multi-Core? Bis zum Jahr 2005 Erhöhung der Leistungsfähigkeit von Rechnern durch den Einsatz von mehreren Single-Core-CPUs Möglich durch die Erhöhung der Taktfrequenz ABER: Höhere Taktfrequenzen verursachen Abwärme Kühlmaßnahmen Energieverbrauch und Lärm Lösung: Keine Steigerung der Taktfrequenz sondern Multi-Core! Mehrere Kerne in einem Prozessor mehrere Recheneinheiten Vorteile: Geringerer Takt Weniger Energieverbrauch pro Kern Weniger Stromverbrauch 4 / 27

Einleitung Warum Multithreading? Warum Multi-Core? Bis zum Jahr 2005 Erhöhung der Leistungsfähigkeit von Rechnern durch den Einsatz von mehreren Single-Core-CPUs Möglich durch die Erhöhung der Taktfrequenz ABER: Höhere Taktfrequenzen verursachen Abwärme Kühlmaßnahmen Energieverbrauch und Lärm Lösung: Keine Steigerung der Taktfrequenz sondern Multi-Core! Mehrere Kerne in einem Prozessor mehrere Recheneinheiten Vorteile: Geringerer Takt Weniger Energieverbrauch pro Kern Weniger Stromverbrauch 4 / 27

Einleitung Warum Multithreading? Multithreading ABER: Optimale Leistung nur durch Beschäftigung aller Prozessorkerne Unterstützung des Betriebssystems Bis jetzt überwiegend sequentielle Programmierung Multithreading: Gleichzeitiges Abarbeiten von mehreren Threads innerhalb eines Prozesses Zwei Parallelisierungsstrategien: Message Passing Shared Memory 5 / 27

Einleitung Warum Multithreading? Multithreading ABER: Optimale Leistung nur durch Beschäftigung aller Prozessorkerne Unterstützung des Betriebssystems Bis jetzt überwiegend sequentielle Programmierung Multithreading: Gleichzeitiges Abarbeiten von mehreren Threads innerhalb eines Prozesses Zwei Parallelisierungsstrategien: Message Passing Shared Memory 5 / 27

Einleitung Warum Multithreading? Multithreading in Shared Memory Parallelisierung durch Compiler-Optionen oder Parallelisierungsanweisungen Schnelle Kommunikation über gemeinsamen Speicher (Pointer) Shared-Memory Parallelrechner überall (Smartphones, Tablets, Laptops,...) Ansätze: PThreads, OpenMP, Intel TBB, Cilk Abbildung: Verallgemeinerung von Programm, Prozess und Threads 6 / 27

Einleitung Ziele Was sollen wir mitnehmen? Was ist Cilk? Wie funktioniert Cilk? Cilk vs OpenMP 7 / 27

Was ist Cilk? Cilk für Multithreading Was ist Cilk? Erweiterung für C/C++ 1994: Veröffentlichung der 1. Version von Cilk (C-basiert) durch Prof. Charles E. Leiserson und Kollegen von MIT-CSAIL 1 Socrates, Socrates 2.0, Cilkchess: Cilk Schachprogramme mit Preisen bei Computer Schachweltmeisterschaften Cilk / Cilk++ / Cilk Plus 2 Weiterentwicklung von Cilk durch Intel läuft auf Linux, Unix, MS Windows Compilers: GCC, ICC, Clang/LLVM 1 Massachussetts Institute of Technology - Computer Science And Artificial Intelligence Laboratory 2 http://www.cilkplus.org 8 / 27

Was ist Cilk? Wie funktioniert Cilk? Programmieren in Cilk Gleiche Syntax wie in C/C++ Gleiche Datentypen wie in C/C++: float, double, int,... Unterschied von Cilk- und C-Quellcode durch weinige Schlüsselwörter (cilk, spawn, sync, inlet, abort) serial/c elision Neuere Schlüsselwörter in Cilk Plus: cilk_spawn, cilk_sync, cilk_for Parallelisierung von sequentiellen Codes einfacher Gute Unterstützung für tiefe Rekursionen und Arrays 9 / 27

Was ist Cilk? Wie funktioniert Cilk? Beispiel: Fibonacci in Cilk und C 1 c i l k i n t f i b ( i n t n ) 2 { 3 i f ( n < 2) return n ; 4 e l s e 5 { 6 i n t x, y ; 7 x = spawn f i b ( n 1); 8 y = spawn f i b ( n 2); 9 sync ; 10 return ( x+y ) ; 11 } 12 } 1 i n t f i b ( i n t n ) 2 { 3 i f ( n < 2) return n ; 4 e l s e 5 { 6 i n t x, y ; 7 x = f i b ( n 1); 8 y = f i b ( n 2); 9 10 return ( x+y ) ; 11 } 12 } 10 / 27

Was ist Cilk? Wie funktioniert Cilk? Keywords in Cilk cilk: Funktion als Cilk Prozess definieren parallele Ausführung möglich spawn: Ausführung des Kindprozesses auf weiterem Prozessor sync: Sicherstellen, dass alle Kindprozesse Ergebnisse zurückgeliefert haben inlet: Bei weiterer Operation mit dem Rückgabewert einen neuen Thread starten ( Bsp: z = add(spawn fib(x)) ) abort: Kindprozess innerhalb einer inlet-funktion abbrechen 11 / 27

Was ist Cilk? Wie funktioniert Cilk? Keywords in Cilk cilk: Funktion als Cilk Prozess definieren parallele Ausführung möglich spawn: Ausführung des Kindprozesses auf weiterem Prozessor sync: Sicherstellen, dass alle Kindprozesse Ergebnisse zurückgeliefert haben inlet: Bei weiterer Operation mit dem Rückgabewert einen neuen Thread starten ( Bsp: z = add(spawn fib(x)) ) abort: Kindprozess innerhalb einer inlet-funktion abbrechen 11 / 27

Was ist Cilk? Wie funktioniert Cilk? Beispiel für inlet und abort Berechne das Produkt: p = n i=0 A i 1 i n t p r oduct ( i n t A, i n t n ){ 2 i n t i, p=1; 3 f o r ( i =0; i <n ; i ++){ 4 p = A[ i ] ; 5 i f ( p == 0) break ; 6 } 7 return p ; 8 } 12 / 27

Was ist Cilk? Wie funktioniert Cilk? Beispiel für inlet und abort 1 c i l k i n t p r o d u c t ( i n t A, i n t n ){ 2 i n t p = 1 ; 3 i n l e t v o i d m u l t i p l y ( i n t x ){ 4 p = x ; 5 i f ( p == 0){ 6 a b o r t ; 7 } 8 r e t u r n ; 9 } 10 i f ( n == 1){ 11 r e t u r n A [ 0 ] ; 12 } e l s e { 13 m u l t i p l y ( spawn p r o d u c t (A, n /2) ) ; 14 m u l t i p l y ( spawn p r o d u c t (A+n /2, n n /2) ) ; 15 sync ; 16 r e t u r n p ; 17 } 18 } 13 / 27

Was ist Cilk? Multithreaded Computation Dynamisches Multithreading: DAG Darstellung der Ausführung des Cilk Programms als DAG (Directed Acyclic Graph) G = (V,E) jeder Knoten v V = thread Es gibt immer: initial thread und final thread jede Kante e E ist entweder: spawn edge (nach unten) return edge (nach oben) oder continuation edge (waagerecht) 14 / 27

Was ist Cilk? Multithreaded Computation Dynamisches Multithreading: DAG Abbildung: DAG für die Berechnung von fib(3). Threads (Kreise) der gleichen Prozedur sind mit einem abgerundeten Rechteck umrandet. 15 / 27

Performance Wie sieht die Performance von Cilk aus? Work - Span - Speedup 16 / 27

Performance Work, Span, Speedup Work und span Zwei Maßeinheiten für die Messung der Leistung: T P Laufzeit für die Ausführung aller Operationen auf P Prozessoren work ( T 1 ): Ausführungszeit aller Anweisungen auf P = 1 Abbildung: work von fib(3) T P = 9 17 / 27

Performance Work, Span, Speedup Work und span span oder critical-path length (T ): Ausführungszeit aller Operationen des längsten Pfades Abbildung: span von fib(3) T = 6 18 / 27

Performance Work, Span, Speedup Speedup speedup = T 1 /T P T 1 /T P = P linear speedup T 1 /T = Parallelisierung Beispiel: Work: T 1 = 9 Span: T = 6 T 1 /T = 1.5 Performance von work-stealing auf P Prozessoren: T P T 1 /P + T 19 / 27

Scheduler und Work-stealing Wie wird die Performance von Cilk erreicht? Scheduler - Work-stealing 20 / 27

Scheduler und Work-stealing Scheduler Der Scheduler Effiziente Einplanung des Ablaufs Beachtung der Abhängigkeiten zwischen den Threads Zuweisung von Threads zu Prozessoren nach den Reihenfolgen der Abhängigkeiten Work-stealing effizient einsetzen 21 / 27

Scheduler und Work-stealing Work-stealing Work-stealing: Dequeue Threads als Queue von Aufgaben verwalten: Beispiel: spawn A; spawn B;... spawn F; 22 / 27

Scheduler und Work-stealing Work-stealing Work-stealing: Steal I Bearbeitung von unten nach oben: return B; return D; 23 / 27

Scheduler und Work-stealing Work-stealing Work-stealing: Steal II Anwendung von Work-stealing für eine bessere Effizienz Work-stealing nur wenn Thread nicht in Ausführung! 24 / 27

Zusammenfassung Zusammenfassung I Multi-Core Rechner überall Optimale und effiziente Nutzung durch Multithreading Motivation zur Implementierung von Multi-Threading-Anwendungen Cilk Eigenschaften von Cilk: Erweiterung von C/C++ durch cilk, spawn, sync Umwandlung von sequentiellen Codes zu parallelen Codes einfach Parallelisierung von Vektoren bietet Leistungsgarantie Scheduler: plant, kommuniziert sorgfältig verwaltet Jobs als Dequeue erlaubt Work-stealing für eine optimale Effizienz 25 / 27

Zusammenfassung Zusammenfassung II Einige Merkmale von Cilk und OpenMP: Cilk C/C++ Einfache Parallelisierung des Codes Low-level-Verwaltung der Parallelisierung Keywords Tiefe Rekursionen, Parallelisierung von Vektoren Cilk view, Cilk screen OpenMP Fortran, C/C++ einfacheres Modell als Message- Passing High-level API Compiler-Direktiven Parallelisierungsprobleme von großen, vorhersehbaren Datenmengen einfacher als Thread-Library 26 / 27

Zusammenfassung Literatur [1] Robert D. Blumofe and Christopher F. Joerg and Bradley C. Kuszmaul and Charles E. Leiserson and Keith H. Randall and Yuli Zhou. Journal of Parallel and Distributed Computing. Pages 55 69. Cilk: An Efficient Multithreaded Runtime System, 1996. ftp://theory.lcs.mit.edu/pub/cilk/cilkjpdc96.ps.gz [2] Wikipedia. Cilk. 2013. http://en.wikipedia.org/w/index. php?title=cilk&oldid=541192075 [3] Charles E. Leiserson and Harald Prokop. A Minicourse on Multithreaded Programming. 1998. http://supertech.csail.mit.edu/cilk/minicourse.pdf. [4] Charles E. Leiserson. Multithreaded Programming in Cilk. 2006. http://supertech.csail.mit.edu/cilk/. [5] OpenMP Tutorial. 2013. https://computing.llnl.gov/tutorials/openmp/ 27 / 27