Multi- und Many-Core

Ähnliche Dokumente
Einige Grundlagen zu OpenMP

Einleitung Entwicklung in C Hello-World! Konstrukte in C Zusammenfassung Literatur. Grundlagen von C. Jonas Gresens

Trend der letzten Jahre in der Parallelrechentechnik

Multi-threaded Programming with Cilk

Konzepte der parallelen Programmierung

Projektseminar Parallele Programmierung

Praktikum: Paralleles Programmieren für Geowissenschaftler

Projektseminar Parallele Programmierung

Evaluation. Einleitung. Implementierung Integration. Zusammenfassung Ausblick

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

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

4.4. MPI Message Passing Interface

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

Cell and Larrabee Microarchitecture

Seminar GPU-Programmierung/Parallelverarbeitung

High Performance Computing

Eine kurze Einführung in Rechnerarchitektur und Programmierung von Hochleistungsrechnern als zentrales Werkzeug in der Simulation

Der Goopax Compiler GPU-Programmierung in C++ ZKI AK-Supercomputing, Münster, , Ingo Josopait

Parallele und verteilte Programmierung

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

High Performance Computing

Einleitung Grundlagen Erweiterte Grundlagen Zusammenfassung Literatur. C: Funktionen. Philip Gawehn

Compute Unified Device Architecture CUDA

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

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

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

Klausur zu High Performance Computing 09. Juli 2011, SS 2011

Message Passing Interface: MPI

OpenMP. Viktor Styrbul

Hochleistungsrechnen in Darmstadt: Der Lichtenberg- Hochleistungsrechner. Dr. Andreas Wolf. Gruppenleiter Hochleistungsrechnen Hochschulrechenzentrum

Projektseminar Parallele Programmierung

Modelle der Parallelverarbeitung

4. Parallelprogrammierung

Praxiseinheit: Realisierung einer hardwarebeschleunigten Disparitätenberechnung zur automatischen Auswertung von Stereobildern

2 Rechnerarchitekturen

Parallel Programming: Message-Passing-Interface

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

Einführung. GPU-Versuch. Andreas Schäfer Friedrich-Alexander-Universität Erlangen-Nürnberg

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

GPU-Programmierung: OpenCL

GPUs. Arbeitsbereich Wissenschaftliches Rechnen Fachbereich Informatik Fakultät für Mathematik, Informatik und Naturwissenschaften Universität Hamburg

Shared-Memory Parallelisierung von C++ Programmen

General Purpose Computation on GPUs

CUDA. Jürgen Pröll. Multi-Core Architectures and Programming. Friedrich-Alexander-Universität Erlangen-Nürnberg Jürgen Pröll 1

High-Performance Computing mit FEMAG

Memory Models Frederik Zipp

Programmierung von Multicore-Rechnern

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

Parallel Processing in a Nutshell OpenMP & MPI kurz vorgestellt

Implementierung zweier Algorithmen mittels OpenCL auf Grafikkarten

CPU-Caches. Christian Duße. Seminar Effiziente Programmierung in C

MPI: Message passing interface

OpenCL Implementierung von OpenCV Funktionen

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

Parallele Programmierung mit OpenMP

Mehrprozessorarchitekturen

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

Klausur zu High Performance Computing 7. Februar 2014

Computeranwendung in der Chemie Informatik für Chemiker(innen) 3. Software

Organisatorisches. Folien (u.a.) auf der Lva-Homepage Skriptum über MU Online

Organisatorisches. Folien (u.a.) gibt's auf der Lva-Homepage zum Download

Visualisierung paralleler bzw. verteilter Programme

Paralleles Programmieren mit MPI und OpenMP

Intel Cluster Studio. Michael Burger FG Scientific Computing TU Darmstadt

Gliederung. Was ist CUDA? CPU GPU/GPGPU CUDA Anwendungsbereiche Wirtschaftlichkeit Beispielvideo

Introduction Workshop 11th 12th November 2013

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

Einführung in das parallele Programmieren mit MPI und Java

(allgemeine) OOP in C++ Klassen und header-files Konstruktorn / Destruktoren Speicherverwaltung C++ Standard Library / SLT

Transkript:

Multi- und Many-Core Benjamin Warnke Arbeitsbereich Wissenschaftliches Rechnen Fachbereich Informatik Fakultät für Mathematik, Informatik und Naturwissenschaften Universität Hamburg 2016-12-15 Benjamin Warnke Multi- und Many-Core 1 / 34

Gliederung (Agenda) 1 Einleitung 2 Thread Parallelisierung TBB OpenMP 3 Prozess Parallelisierung MPI 4 Kombination Threads und Prozesse 5 Zusammenfassung 6 Literatur Benjamin Warnke Multi- und Many-Core 2 / 34

Gliederung (Agenda) 1 Einleitung 2 Thread Parallelisierung TBB OpenMP 3 Prozess Parallelisierung MPI 4 Kombination Threads und Prozesse 5 Zusammenfassung 6 Literatur Benjamin Warnke Multi- und Many-Core 3 / 34

Herausforderungen im Verlauf der Zeit verändert nach [1] Benjamin Warnke Multi- und Many-Core 4 / 34

Warum Multi- und Manycore Ziel: Mehr Rechenleistung (Flops/sec) erster Ansatz: höherer Takt! höhere Spannung! mehr Hitze! unmöglich zu kühlen neuer Ansatz: langsamer Takt dafür mehr gleichzeitig! kleinere Spannung! Energieeffizienz Benjamin Warnke Multi- und Many-Core 5 / 34

Probleme von Mehrkernsystemen Speicherbandbreite erschwertes Debuggen Algorithmus muss parallelisierbar sein! nicht jede Parallelisierung ist schneller Nichtdeterminismus Overhead durch Parallelisierung Synchronisierung! Sperr-Verfahren! deadlocks Benjamin Warnke Multi- und Many-Core 6 / 34

Multi- und Manycore Systemprozessor (2 POSIX-Threads OpenMP TBB MPI OpenACC 16 Kerne)! Multicore GPU (> 1000 Kerne)! Manycore CUDA OpenCL OpenGL (für Grafikberechnungen) OpenACC Xeon Phi ( 70 Kerne)! Manycore Mischform Benjamin Warnke Multi- und Many-Core 7 / 34

Xeon Phi - Mischform Quelle: [5] Benjamin Warnke Multi- und Many-Core 8 / 34

Xeon Phi (Co-)Prozessor PCI-Express/Sockel 70 Kerne 280 Threads langsamer Takt Hardware optimiert für parallelen Code besonders gut geeignet für Vektoroperationen (nur PCI-Express) verschiedene Modi Rechenlast aufteilen mit Systemprozessor Eigenenständiger Rechnerknoten Wie GPU nur verwendet bei Bedarf durch CPU unterstützt MPI Benjamin Warnke Multi- und Many-Core 9 / 34

Thread vs Prozess Gemeinsam Unabhängige parallele Code-Ausführung vom Betriebssystem verwaltet Prozess eigener Adressraum im Speicher Kommunikation durch Nachrichten/ Dateien/ Shared Memory Segmente im Fehlerfall kein unmittelbarer Einfluss auf andere Prozesse Thread gemeinsamer Speicher innerhalb eines Prozesses wenn 1 Thread abstürzt, dann auch der gesamte Prozess Benjamin Warnke Multi- und Many-Core 10 / 34

Gliederung (Agenda) 1 Einleitung 2 Thread Parallelisierung TBB OpenMP 3 Prozess Parallelisierung MPI 4 Kombination Threads und Prozesse 5 Zusammenfassung 6 Literatur Benjamin Warnke Multi- und Many-Core 11 / 34

Thread Parallelisierung Vorteile kein Kopieren der Daten notwendig bessere Zugriffszeit Compiler können bei Datenaufteilung helfen Compilergestützter Lastausgleich möglich Nachteile gemeinsame Speicherbandbreite Benjamin Warnke Multi- und Many-Core 12 / 34

TBB Thread Building Blocks C++ template library Stärken Parallele Datentypen z.b. "vector", "queue", "map" nicht balancierte Schleifen work stealing starke Compiler Optimierung zur Laufzeit anpassbar gute Code Lesbarkeit durch Templates Open Source Schwächen nur C++ läuft auf diesem Cluster langsam Benjamin Warnke Multi- und Many-Core 13 / 34

TBB Schleifen Parallelisierung 1 #include "tbb/tbb.h" 2 void SerialLoop(float a[]) { 3 for(int i = 0; i < a.length; i++){ 4 DoSomething(i,a[i]); 5 } 6 } 7 void ParallelLoop(float a[]) { 8 tbb::parallel_for(0, a.length, [&](int i) { 9 DoSomething(i,a[i]); 10 }); 11 } Listing 1: Schleifen Parallelisierung Benjamin Warnke Multi- und Many-Core 14 / 34

TBB Queue Parallelisierung 1 #include "tbb/tbb.h" 2 std::queue<t> MySerialQueue; 3 tbb::concurrent_queue<t> MyParallelQueue; 4 T item; 5 void SerialPop(){ 6 if(!myserialqueue.empty() ) { 7 item = MySerialQueue.front(); 8 MySerialQueue.pop_front(); 9 DoSomething(item); 10 } 11 } 12 void ParallelPop(){ 13 if(myparallelqueue.try_pop(item) ) { 14 DoSomething(item); 15 } 16 } Listing 2: Queue Parallelisierung Benjamin Warnke Multi- und Many-Core 15 / 34

OpenMP OpenMP Stärken Parallelisierung durch Compiler Anweisungen iterative Parallelisierung möglich Vektorisierung wird nicht beeinflusst Schwächen keine parallelen Datenstrukturen enthalten nicht alle Compiler unterstützen OpenMP erhöhte Fehlergefahr durch Variablen, die private sein sollten Benjamin Warnke Multi- und Many-Core 16 / 34

OpenMP Schleifen Parallelisierung 1 void SerialLoop(float a[]) { 2 for(int i = 0; i < a.length; i++){ 3 DoSomething(i,a[i]); 4 } 5 } 6 void ParallelLoop(float a[]) { 7 #pragma omp parallel for 8 for(int i = 0; i < a.length; i++){ 9 DoSomething(i,a[i]); 10 } 11 } Listing 3: Schleifen Parallelisierung Benjamin Warnke Multi- und Many-Core 17 / 34

partdiff-xxx.exe $i 2 1024 2 2 800 Speedup 20 15 10 5 f(x)=x Sequentiel OMP TBB (TBB) 1 1 6 12 18 24 30 36 42 48 54 60 66 72 Threads Benjamin Warnke Multi- und Many-Core 18 / 34

Gliederung (Agenda) 1 Einleitung 2 Thread Parallelisierung TBB OpenMP 3 Prozess Parallelisierung MPI 4 Kombination Threads und Prozesse 5 Zusammenfassung 6 Literatur Benjamin Warnke Multi- und Many-Core 19 / 34

Prozess Parallelisierung Vorteile beliebig viele Prozesse größere Speicherbandbreite größerer (Haupt-) Speicher Nachteile Kopieren von Datenteilen notwendig Compiler können bei Optimierung kaum helfen Lastausgleich muss explizit codiert werden nur wenige und teure Debugger sehr aufwendiges Debuggen Benjamin Warnke Multi- und Many-Core 20 / 34

MPI Message Passing Interface Bibliothek für Nachrichtenaustausch Stärken beliebig viele Prozesse verteilte Systeme (Cluster) Implementierungen für C, C++, Fortran, Java, Python, Schwächen expliziter Code notwendig explizite Datenaufteilung benötigt wrapper Compiler Benjamin Warnke Multi- und Many-Core 21 / 34

MPI Hello World 1 #include <mpi.h> 2 int world_size;// Anzahl der Prozesse 3 int world_rank;// Nummer dieses Prozesses 4 int main(int argc, char** argv) { 5 MPI_Init(&argc,&argv); 6 MPI_Comm_size(MPI_COMM_WORLD, &world_size); 7 MPI_Comm_rank(MPI_COMM_WORLD, &world_rank); 8 dosomething(); 9 MPI_Finalize(); 10 } Listing 4: Hello World Benjamin Warnke Multi- und Many-Core 22 / 34

MPI Hello World 1 #include <stdio.h> 2 #include <mpi.h> 3 void dosomething() { 4 printf("hello World from Rank %d \n", world_rank); 5 int number; 6 if (world_rank == 0) { 7 number = rand(); 8 MPI_Send(&number, 1, MPI_INT, 1, 0,,! MPI_COMM_WORLD); 9 } else { 10 MPI_Recv(&number, 1, MPI_INT, 0, 0,,! MPI_COMM_WORLD, MPI_STATUS_IGNORE); 11 printf("received %d \n", number); 12 } 13 } Listing 5: Hello World Benjamin Warnke Multi- und Many-Core 23 / 34

partdiff-xxx.exe $i 2 1024 2 2 800 Speedup 60 55 50 45 40 35 30 25 20 15 10 5 1 1 6 12 18 24 30 36 42 48 54 60 66 72 Threads/Prozesse f(x)=x Sequentiel OMP TBB (TBB) MPI MPI Benjamin Warnke Multi- und Many-Core 24 / 34

Gliederung (Agenda) 1 Einleitung 2 Thread Parallelisierung TBB OpenMP 3 Prozess Parallelisierung MPI 4 Kombination Threads und Prozesse 5 Zusammenfassung 6 Literatur Benjamin Warnke Multi- und Many-Core 25 / 34

Kombination Threads und Prozesse Vorteile gemeinsamer Cache für Threads größere Speicherbandbreite durch mehrere Rechenknoten Nachteile Kopieren von Daten über das Netzwerk nötig Lastausgleich muss explizit codiert werden Fehlerquellen von Threads + Prozessen sehr aufwendiges Debuggen Benjamin Warnke Multi- und Many-Core 26 / 34

partdiff-xxx.exe $i 2 1024 2 2 800 Speedup 60 55 50 45 40 35 30 25 20 15 10 5 1 1 6 12 18 24 30 36 42 48 54 60 66 72 Threads Prozesse f(x)=x Sequentiel OMP TBB (TBB) MPI MPI MPI+OMP MPI+TBB (MPI+TBB) Benjamin Warnke Multi- und Many-Core 27 / 34

Gliederung (Agenda) 1 Einleitung 2 Thread Parallelisierung TBB OpenMP 3 Prozess Parallelisierung MPI 4 Kombination Threads und Prozesse 5 Zusammenfassung 6 Literatur Benjamin Warnke Multi- und Many-Core 28 / 34

Zusammenfassung Probleme von Multicore-Architekturen Xeon Phi (Co-)Prozessor TBB und OpenMP MPI zur Kommunikation zwischen verschiedenen Rechenknoten verschiedene Varianten der Parallelisierung sind kombinierbar Benjamin Warnke Multi- und Many-Core 29 / 34

Gliederung (Agenda) 1 Einleitung 2 Thread Parallelisierung TBB OpenMP 3 Prozess Parallelisierung MPI 4 Kombination Threads und Prozesse 5 Zusammenfassung 6 Literatur Benjamin Warnke Multi- und Many-Core 30 / 34

Literatur I [1] Adapteva turns to Kickstarter to fund massively parallel processor. [Online]. Available: https://www.extremetech.com/electronics/ 137085-adapteva-turns-to-kickstarter-to-fund-massively-parallel-p [2] Die Evolution von Multi-Core- zu Many-Core-Prozessoren. [Online]. Available: ftp://ftp.ni.com/pub/branches/germany/ 2015/artikel/06-juni/04_Der_Kern_der_Materie_Tom_ Bradicich_Invision_3_2015.pdf [3] Manycore processor. [Online]. Available: https://en.wikipedia.org/wiki/manycore_processor Benjamin Warnke Multi- und Many-Core 31 / 34

Literatur II [4] What is the difference between many core and multi core? [Online]. Available: http://electronics.stackexchange.com/questions/37982/ what-is-the-difference-between-many-core-and-multi-core [5] The Future of Larrabee: The Many Core Era. [Online]. Available: http://www.anandtech.com/show/2580/14 [6] Ask James Reinders: Multicore vs. Manycore. [Online]. Available: https://goparallel.sourceforge.net/ ask-james-reinders-multicore-vs-manycore/ [7] Xeon Phi. [Online]. Available: http://www.intel.de/content/ www/de/de/processors/xeon/xeon-phi-detail.html Benjamin Warnke Multi- und Many-Core 32 / 34

Literatur III [8] Intel R Threading Building Blocks, OpenMP, or native threads? [Online]. Available: https://software.intel.com/en-us/ intel-threading-building-blocks-openmp-or-native-threads [9] Intel R Threading Building Blocks (Intel R TBB) Developer Guide. [Online]. Available: https://software.intel.com/en-us/tbb-user-guide [10] Generic Parallel Algorithms. [Online]. Available: https://www.threadingbuildingblocks.org/ tutorial-intel-tbb-generic-parallel-algorithms Benjamin Warnke Multi- und Many-Core 33 / 34

Literatur IV [11] Concurrent Containers. [Online]. Available: https://www.threadingbuildingblocks.org/ tutorial-intel-tbb-concurrent-containers [12] Message Passing Interface. [Online]. Available: https://de.wikipedia.org/wiki/message_passing_interface [13] MPI Hello World. [Online]. Available: http://mpitutorial.com/tutorials/mpi-hello-world/ Benjamin Warnke Multi- und Many-Core 34 / 34