Seminar: Software Engineering für Exascale …...Intel Xeon Phi 5110P – Many Integrated Cores 6...
Transcript of Seminar: Software Engineering für Exascale …...Intel Xeon Phi 5110P – Many Integrated Cores 6...
Programmierung von Many-Cores Seminar: Software Engineering für Exascale Computing
Patrizia Peller April 18, 2013
Programmierung von Many-Cores
Hardware-Architekturen Anforderungen an Programmiersprachen Parallelisierung in Programmiersprachen Programmierumgebungen und Bibliotheken
Plattform-spezifische Programmierumgebungen
On step higher: Cross-Plattform Entwicklungsumgebungen
Einordnung: welche Sprache für welche Architektur? Aussichten
2
Hardware-Architekturen 1) Six-Core AMD OpteronTM
2) Intel Xeon Phi 5110P
3) NVIDIA® TESLA K20C
4) Parallella
5) Kalray
6) Anforderungen an Programmiersprachen
3
Gegenüberstellung AMD Opteron Intel Xeon Phi
5110P NVIDIA Tesla K20C
Parallella Kalray
# Kerne 6 -‐ 12 60 2688 16-‐64 256 – 1024 Kerne
Leistungs-‐aufnahme
40 bis 105 Watt 225 Watt 235 Watt 5 Watt 5 Watt
Frequenz 1.800 -‐ 2.800 MHz 1.053 GHz 735 – 745 MHz 800 MHz 400 MHz
Rechenleistung 10 GFLOPS 1 TFLOPS 1,17 – 1,3 TFLOPS 25 bis 90 GFLOPS 230 – 920 GFLOPS
Architektur Direct Connect Many Integrated Cores
NVIDIA CUDA Epiphany MPPA
Speicher-‐verwaltung
Verteilter L2, gemeinsamer L3 Cache
Verteilter L2, gemeinsamer L3 Cache
Shared Memory Distributed Shared Memory
Distributed Memory
Programmier-‐sprachen
N.A. Cilk Plus, TBB, OpenMP, MPI, DO CONCURRENT
CUDA, OpenACC, OpenCL, DirectX, Fortran
OpenCL, Erlang, Python, GO
MPPA ACCESSCORE
Große Unterschiede in den technischen Spezifikationen und der Leistung
Hardware-Architekturen
4
Hardware-Architekturen
5
Six-core AMD OpteronTM ¡ Keine Unterstützung zur
Thread-Verwaltung, ¡ Trotzdem gut geeignet für
Programme mit Multithreading
¡ Hardware verwaltet den Arbeitsspeicher selbst
¡ Leistungsfähige, flexible Kerne, dafür weniger
http://www.amd.com/de/Documents/4P_Server_Arch_Compare_44226B.pdf http://www.amd.com/de/products/server/processors/six-core-opteron/
Pages/six-core-opteron.aspx http://www.amd.com/de/Documents/Cores_vs_Threads_Whitepaper.pdf
Intel Xeon Phi 5110P – Many Integrated Cores
6
Hardware-Architekturen
¡ Gemeinsamer Speicher ist GDDR5 Speicher => optimiert für Einsatz als GPU-Arbeitsspeicher
¡ Unterstützt massives Threading (bis 240 Threads)
¡ Arbeitet auf Vektoren -> Einschränkung bei Programmiersprachen http://www.intel.com/content/www/us/en/processors/xeon/xeon-phi-detail.html
http://software.intel.com/en-us/articles/intel-xeon-phi-coprocessor-codename-knights-corner
NVIDIA TESLA K20C – Kepler Architektur
Hardware-Architekturen
7
Shared memory!!!
¡ Sehr hohe Anzahl an Kernen, dafür sehr einfach
¡ Einsatz: rechenintensive Programme mit einfachen arithmetischen Operationen
¡ Anwendungsgebiete z.B. Molekulardynamik, Quantenchemie, numerische Analytik, Physik, Wetter- und Klimavorhersage
https://developer.nvidia.com/what-cuda http://www.nvidia.de/object/why-choose-tesla-de.html
http://www.nvidia.de/content/PDF/kepler/NVIDIA-Kepler-GK110-Architecture-Whitepaper.pdf
Parallella und seine Architektur Epiphany
Hardware-Architekturen
8
¡ distributed shared memory!!!
¡ General Purpose Prozessoren
¡ Hardware-Support für multicore data-sharing
¡ Neutral gegenüber Programmiermodellen
http://www.parallella.org/introduction/ http://www.adapteva.com/wp-content/uploads/2012/12/
epiphany_arch_reference_3.12.12.18.pdf
Kalray – MPPA 256 Cluster
Hardware-Architekturen
9
¡ VLIW-Prozessor mit einfachen Kernen ¡ VLIW: Very Long Instruction Word
¡ Support für spezielle Operationen wie z.B. Bit-Shuffling oder Byte-Swapping ¡ Spezialisiert auf kryptographische
Operationen
¡ Daten laufen durch Splitter, jeder Task erhält einen Teil ¡ CPU verwaltet die Threads wie bei
GPUs
http://www.kalray.eu/
1) Energieeffizienz § Künftig weniger Threads, dafür mehr Kerne =>
erfordert mehr Parallelität
2) Unterschied zwischen CPUs und GPUs verschwimmt
3) Portabilität von Programmen zwischen Plattformen
§ high-level Programmiersprachen für Entwickler wünschenswert -> höhere Performanz, gute Portabilität
§ ! Trade-Off zwischen Performanz und Parallelität
Anforderungen an Programmiersprachen
Hardware-Architekturen
10
Parallelisierung in Programmiersprachen 1) X10 - Task-basierter Lösungsansatz
2) Go: Communicating Sequential Processes
3) Scala: Parallelisierung mit dem Actor-Modell
4) Parallelisierungstechniken
11
Task-basiertes Programmieren ¡ Entwickler muss parallelisierbare Befehle selbst identifizieren und
kennzeichnen
¡ Run-time System übernimmt eigentliches Scheduling auf vorhandener Hardware ¡ Für den Programmierer transparent
¡ Mit work-stealing-Algorithmus (garantiert Ausführung in maximal doppelter Zeit als optimal)
¡ Implizit Verwendung von gemeinsamem Speicher
Parallelisierung in Programmiersprachen
12
X10 – Task-basierter Lösungsansatz ¡ Objektorientiert, compiliert zu Java-Bytecode
¡ Beruht auf dem PGAS Modell: partitioned global address space
¡ Umgebung besteht aus mehreren places (Kern/Prozessor mit eigenem Speicher)
¡ Objekte in einem place bieten nur in diesem place Lese- und Schreibrechte ¡ Activities (~Task) müssen zuerst auf diesen place verschoben werden
¡ Container wie z.B. Arrays können über mehrere places verteilt sein => erleichtert Parallelisierung
Parallelisierung in Programmiersprachen
13
Programming Many-Core Chips, Vajda András, 2011, Springer Verlag, Kapitel 8 bis 10
CSP Modell ¡ Prozesse sind statisch definiert, spezieller Mechanismus zum
Kennzeichnen parallel ausführbarer sequentieller Prozesse
¡ Kommunikation zw. Prozessen nur über Nachrichten ¡ Nur wenn der Sender den Empfänger explizit nennt und umgekehrt
und der Empfänger bereit ist, sonst Verzögerung ¡ Mehrere Nachrichten: eine wird ausgewählt -> nicht-deterministisch ¡ Nachrichten steuern den Kontrollfluss im Programm!
¡ Share-nothing-Prinzip: kein gemeinsamer Speicher, nur Kommunikation
Ø Small-scale Anwendung in sicherheitskritischen Systemen, aber nicht geeignet für komplexere Anforderungen
Parallelisierung in Programmiersprachen
14
Go: Communicating Sequential Processes ¡ Imperative Sprache wie Java / C++
¡ Implementiert CSP Modell, ermöglicht aber gemeinsamen Speicher
¡ Parallelität über: ¡ Communication channels: Kommunikation zwischen Prozessen,
Versand von Referenzen auf Daten und Channels
¡ Prinzip: „Share memory by communicating“
¡ Goroutines: werden von anderen Prozessen ausgelöst und können mit anderen Prozessen kommunizieren
Parallelisierung in Programmiersprachen
15
Programming Many-Core Chips, Vajda András
Actor-Modell ¡ Actor: ¡ Asynchrone Kommunikation mit jedem Actor möglich
¡ Führt Operationen je nach eingehender Nachricht und internem Zustand aus
¡ kann mit (beliebig vielen) Nachrichten antworten
¡ Kann neue Actors erzeugen -> dynamisch
¡ Zustellungsreihenfolge der Nachrichten nicht total ¡ Events sind dagegen total geordnet!
¡ Keine zentrale Einheit, die alleinigen Überblick über das gesamte System hat -> verteilt
Parallelisierung in Programmiersprachen
16
Scala: Parallelisierung mit dem Actor-Modell ¡ Blend aus objektorientierter und funktioneller Sprache
¡ Compiled zu Java-Bytecode und in JVM ausgeführt ¡ für unterschiedliche Plattformen geeignet ¡ Actors werden auf Java-Thread gemapped und von der JVM
gescheduled
¡ Synchrone und asynchrone Nachrichten möglich (synchron: Sender wird blockiert bis die reply des Empfängers da ist
Parallelisierung in Programmiersprachen
17
Programming Many-Core Chips; Vajda András
Parallelisierungstechniken ¡ Schleifenparallelisierung: ¡ Intel TBB: parallel_for, parallel_do, parallel_reduce
¡ OpenMP: #pragma omp parallel for
¡ SPAP: forall
¡ Compiler-Direktiven ¡ OpenMP: #pragma omp <Anweisung>
¡ OpenACC: !$acc <Anweisung>, #pragma acc <Anweisung>
¡ Spezielle Umgebungsvariablen z.B. in OpenMP
Parallelisierung in Programmiersprachen
18
Programming Many-Core Chips, Vajda András Quellen der folgenden folgenden Programmiersprachen
Parallelisierungstechniken ¡ Zusätzliche Schlüsselwörter ¡ Intel Cilk: cilk, spawn, sync
¡ X10: async, finish, atomic oder clocked
¡ Implementierung spezieller Klassen + Overriding von Methoden ¡ Scala: Klasse Actor, Methode Actor.act()
¡ Intel TBB: Klasse Task, Methode Task.execute()
¡ Microsoft TPL: Klasse Task
Parallelisierung in Programmiersprachen
19
Programmierumgebungen und Bibliotheken ¡ Standardisierte Entwicklungsumgebungen von Betriebssystem-
und Hardware-Herstellern 1) Intel Cilk
2) Apple: Grand Central Dispatch
3) Microsoft Task Parallel Library
Einsetzbar, wenn Hardware / OS / Applikationen bekannt ⇒ hoher Parallelisierungsgrad erreichbar ⇒ Weniger sinnvoll, wenn Programm auf unterschiedlichen Plattformen laufen muss
20
Programmierumgebungen und Bibliotheken ¡ One step higher: Cross-Plattform Entwicklungsumgebungen
1) OpenMP
2) OpenHMPP
3) OpenCL
4) SPAP
Einsatzbereiche: ⇒ Programme, die auf jeder CPU und/oder GPU
laufen müssen ⇒ Bsp: AES-Verschlüsselung, JPEG-Encoding
21
Intel Cilk ¡ Task-basiert:
¡ Threads werden mit Kontext initiiert und in einer Queue verwaltet, von der Prozessoren stehlen können (work-stealing)
¡ Resultat: DAG (directed acyclic graph) mit G = (V, E): V = Menge aller Knoten (hier Threads) E = Menge aller Kanten (hier Kontext des Parent-Threads) ¡ Dynamisch aufbaubar!
Plattform-spezifische Programmierumgebungen
22
Programming Many-Core Chips, Vajda András
¡ Beispiel: cilk unsigned int fibonacci (unsigned int num) { if (num < 2) return num; else { unsigned int f1, f2;
f1 = spawn fibonacci(num – 1); f2 = spawn fibonacci(num – 2);
sync;
return f1 + f2; } }
Apple Grand Central Dispatch ¡ Basiert auf Compiler-
Erweiterungen wie ¡ Blocks: ähnlich wie private
Funktionen
int(hitchhiker)(int) =
^(int n){return n*42}
¡ Ausführung dieser Blocks kann auf mehrere Queues verteilt werden
Plattform-spezifische Programmierumgebungen
23
Programming Many-Core Chips, Vajda András
Microsoft Task Parallel Library ¡ Teil des .NET Frameworks seit Version 4.0
¡ Scheduler arbeitet auf Thread-Pool, Thread local queues und mit „work-stealing“ ¡ Besonderheit: In-lining von Tasks
¡ Tasks können auch abgebrochen werden!
¡ Explizite Synchronisation erforderlich
Plattform-spezifische Programmierumgebungen
24
Programming Many-Core Chips, Vajda András
Task 1
Task 2
Task 3
Task 4
Task 5
Wartet auf
Wird vorgezogen
OpenMP ¡ Task-basiert und data-parallel
¡ Parallelisierung mit Hilfe von: ¡ Synchronization primitives: Scheduling nur an bestimmten Punkten
¡ Data-Sharing Attributes: shared(x,y,z,n) ó private(i)
¡ Verschachtelte Parallelisierung: Verschachtelung von Tasks
¡ Thread-Pool-Dimensionierung und –Management
¡ Runtime-System muss Scheduling der Tasks und Zuweisung zu Prozessoren übernehmen
Ø Besonders geeignet für CPUs
One step higher: Cross-Plattform Entwicklungsumgebungen
25
Programming Many-Core Chips, Vajda András
OpenHMPP ¡ Hauptsächlich für GPUs
¡ Arbeitet mit Compiler-Direktiven ¡ Direktiven: beschreiben remote procedure calls auf accelerators
¡ Entwickler muss Hardware (und damit Scheduling) selbst verwalten
¡ Fokus auf Portabilität
26
http://www.caps-entreprise.com/openhmpp-directives/ One step higher: Cross-Plattform Entwicklungsumgebungen
OpenCL ¡ Task = Kernel mit genau einem Arbeitspaket
¡ Kernel kann nicht als Host-Funktion dienen
¡ Programmausführung auf command queues
¡ Hardware zuständig für Scheduling der Queues auf OpenCL devices ¡ Devices bestehen aus mehreren Recheneinheiten ¡ Nur für GPUs, die Tasks selbst verwalten
¡ Asynchron: in-order (seriell) oder out-of-order Ausführung der Befehle
Ø dynamisches task-paralleles Programmieren kaum möglich
One step higher: Cross-Plattform Entwicklungsumgebungen
27
Programming Many-Core Chips, Vajda András
SPAP ¡ Programme auf CPUs und GPUs verwendbar
¡ Definiert eigene Container wie z.B. Lists: auto pos_i = new int<>;
¡ Zwei Parallelisierungsarten: 1. Innerhalb eines Prozessors: push_back() 2. Zwischen Prozessoren: distribute()
¡ SPAP Befehle werden automatisch durch die effizienteste Implementierung des Prozessors ersetzt
¡ Scheduling: Teile von Tasks werden an Prozessoren vergeben, sobald diese frei sind ¡ Größe der Teile bestimmt durch Kapazität des Prozessors oder Entwickler
One step higher: Cross-Plattform Entwicklungsumgebungen
28
SPAP: A Programming Language for Heterogenous Many-Core Systems.Qiming Hou, Kun Zhou, Baining Guo. Graphical
and Parallel Systems Lab, Zhejiang University. 2010
Einordnung: Welche Sprache für welche Architektur?
29
Aussichten Automatisierung
Immer noch direkte Anweisungen erforderlich, wo Parallelisierung in einem Programm möglich ist
Higher level
High-level Programmiersprachen mit Parallelisierungsmechanismen versehen
Neue Technologien
NVIDIA Volta (GPU mit bis zu 1TB/s Bandbreite, vermutlich 2016): neue Technologie mit Stacked DRAM Devise: weg von Threads hin zu Cores
30