Transparente Nutzung von Multi-GPU Cluster unter Java/OpenMP



Ähnliche Dokumente
Die Programmiersprache Java. Dr. Wolfgang Süß Thorsten Schlachter

Übung: Verwendung von Java-Threads

Einführung in die Java- Programmierung

Programmierkurs Java

OpenMP am Beispiel der Matrizenmultiplikation

Objektorientierte Programmierung

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein.

Session Beans & Servlet Integration. Ralf Gitzel ralf_gitzel@hotmail.de

4D Server v12 64-bit Version BETA VERSION

Grundlagen von Python

Proseminar Technische Informatik A survey of virtualization technologies

Programmierung für Mathematik (HS13)

Java Einführung Collections

Vorlesung Objektorientierte Softwareentwicklung. Kapitel 0. Java-Überblick

Virtueller Seminarordner Anleitung für die Dozentinnen und Dozenten

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

Theoretische Grundlagen der Informatik

ObjectBridge Java Edition

Universität Karlsruhe (TH)

Tipps und Tricks zu Netop Vision und Vision Pro

Konzepte der Informatik

Softwaretechnik (Allgemeine Informatik) Überblick

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Kostenstellen verwalten. Tipps & Tricks

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Einführung in die Java- Programmierung

Software Engineering Klassendiagramme Assoziationen

Prof. Dr. Uwe Schmidt. 21. August Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (IA 252)

Entscheidungsbäume. Definition Entscheidungsbaum. Frage: Gibt es einen Sortieralgorithmus mit o(n log n) Vergleichen?

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Übung Grundlagen der Programmierung. Übung 03: Schleifen. Testplan Testergebnisse

Um ein solches Dokument zu erzeugen, muss eine Serienbriefvorlage in Word erstellt werden, das auf die von BüroWARE erstellte Datei zugreift.

Internet Explorer Version 6

Abschnitt: Algorithmendesign und Laufzeitanalyse

Klassenentwurf. Wie schreiben wir Klassen, die leicht zu verstehen, wartbar und wiederverwendbar sind? Objektorientierte Programmierung mit Java

Universität Karlsruhe (TH)

Einführung in die Programmierung Laborübung bei Korcan Y. Kirkici. 12.Übung bis

Würfelt man dabei je genau 10 - mal eine 1, 2, 3, 4, 5 und 6, so beträgt die Anzahl. der verschiedenen Reihenfolgen, in denen man dies tun kann, 60!.

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Algorithmen & Datenstrukturen 1. Klausur

Programmiertechnik II

Alignment-Verfahren zum Vergleich biologischer Sequenzen

Java: Vererbung. Teil 3: super()

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015

Java Entwicklung für Embedded Devices Best & Worst Practices!

Kommunikations-Management

EMU Bill & Report 1/33

Kommunikations-Management

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Zimmertypen. Zimmertypen anlegen

Pakete dienen dazu, die Software eines Projektes in größere inhaltlich zusammengehörige Bereiche mit eigenem Namen einzuteilen (siehe Java API).

Beheben von verlorenen Verknüpfungen

Video Unlimited -Nutzungsbeschränkungen

Anlegen eines SendAs/RecieveAs Benutzer unter Exchange 2003, 2007 und 2010

Application Layer Active Network

BEISPIELKLAUSUR Softwareentwicklung:

1 Einleitung. Lernziele. Symbolleiste für den Schnellzugriff anpassen. Notizenseiten drucken. eine Präsentation abwärtskompatibel speichern

Klausur zur Einführung in die objektorientierte Programmierung mit Java

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster

Java Virtual Machine (JVM) Bytecode

Konfiguration der tiptel Yeastar MyPBX IP-Telefonanlagen mit Deutsche Telefon Standard AG

Abacus Formula Compiler (AFC)

Applets I. Grundlagen der g Applet-Programmierung

Individuelle Formulare

1. Einfach verkettete Liste unsortiert 2. Einfach verkettete Liste sortiert 3. Doppelt verkettete Liste sortiert

Informatik-Sommercamp Mastermind mit dem Android SDK

Ein Scan basierter Seitenangriff auf DES

Backup Premium Kurzleitfaden

Wärmebildkamera. Arbeitszeit: 15 Minuten

Ordner Berechtigung vergeben Zugriffsrechte unter Windows einrichten

12. Dokumente Speichern und Drucken

Transparente Hausverwaltung Marketingschmäh oder doch: eine neue Dimension der Dienstleistung?

BMW ConnectedDrive. connecteddrive. Freude am Fahren BMW CONNECTED DRIVE. NEUERUNGEN FÜR PERSONALISIERTE BMW CONNECTED DRIVE DIENSTE.

.NET Code schützen. Projekt.NET. Version 1.0

Option 1: Hinzufügen eines Schritts zur Bearbeitungsliste... 2

Copyright 2014 Delta Software Technology GmbH. All Rights reserved.

Bruchez, Eddy Druckdatum :21:00

Wo finde ich die Software? - Jedem ProLiant Server liegt eine Management CD bei. - Über die Internetseite

Einfach und schnell Kurse herbeizaubern mit dem Kurs Wizard

Diplomarbeit. Konzeption und Implementierung einer automatisierten Testumgebung. Thomas Wehrspann. 10. Dezember 2008

DURCH VIDA ERZEUGTE PROTOKOLLDATEIEN 1 EINFÜHRUNG

Algorithmen mit Python

Zusatzmodul Lagerverwaltung

RAID-Programm für Windows

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

Java Enterprise Architekturen Willkommen in der Realität

Titel. SCSM ITIL - CMDB - neue CI Klasse erstellen und benutzen. Eine beispielhafte Installationsanleitung zur Verwendung im Testlab

Wir arbeiten mit Zufallszahlen

1. Motivation / Grundlagen 2. Sortierverfahren 3. Elementare Datenstrukturen / Anwendungen 4. Bäume / Graphen 5. Hashing 6. Algorithmische Geometrie

Objektorientierte Programmierung. Kapitel 12: Interfaces

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

Updatehinweise für die Version forma 5.5.5

Kapitel 6: Graphalgorithmen Gliederung

DHBW Karlsruhe, Vorlesung Programmieren, Klassen (2)

FastViewer Remote Edition 2.X

Konfiguration der tiptel Yeastar MyPBX IP-Telefonanlagen mit Deutsche Telefon Standard AG

Benutzerverwaltung Business- & Company-Paket

6. Bayes-Klassifikation. (Schukat-Talamazzini 2002)

1. Bearbeite Host Netzgruppen

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom b

Transkript:

Transparente Nutzung von Multi-GPU Cluster unter Java/OpenMP Dipl. Inf. Thorsten Blaß Programming Systems Group Martensstraße 3 91058 Erlangen

Ausblick Motivation Einführung Java/OpenMP (JaMP) JaMP Sprache Architektur Compute Device Architecture Cluster Array Package Optimierungen Leistung des Frameworks Transparente Nutzung von Multi-GPU Cluster unter Java/OpenMP Thorsten Blaß 06.04.2011 Folie 2

Motivation Heutige Desktop-PCs sind heterogene parallele Architekturen Viele Sprachen/Erweiterungen führen ans Ziel nvidia: CUDA, ATI: Stream, Khronos: OpenCL Sprachen/Erweiterungen müssen erlernt und verstanden werden Bestehende Algorithmen müssen portiert werden Algorithmen-Entwurf / -Portierung ist teuer und fehleranfällig Neue Architektur -> beginnt das Spiel von vorne? Wie kann man diese enorme Rechenleistung transparent an Entwickler weitergeben? Ziel: Algorithmen nur einmal implementieren und auf beliebigen Architekturen mit beliebigen Beschleunigern ausführen Transparente Nutzung von Multi-GPU Cluster unter Java/OpenMP Thorsten Blaß 06.04.2011 Folie 3

JaMP JaMP implementiert das OpenMP-Framework für Java Standard zur Programmierung von Shared-Memory-Systemen OpenMP definiert plattformunabhängige Compiler-Direktiven, Bibliotheksfunktionen und Umgebungsvariablen Bewahrt Java's write once run anywhere -Ansatz Problem: Zur Übersetzungs-Zeit sind keine Annahmen über die Zielplattform möglich Alle zur Laufzeit verfügbaren Beschleuniger werden genutzt Compiler-Direktiven sind in Kommentare gekapselt //#omp parallel for for(int i = 0; i < 4096; i++){ A[i] = B[i] + C[i] } Modfizierter Eclipse-Java-Compiler übersetzt JaMP-Code nach Java-Bytecode Transparente Nutzung von Multi-GPU Cluster unter Java/OpenMP Thorsten Blaß 06.04.2011 Folie 4

JaMP Java+OpenMP Quellcode Java/OpenMP Class Loader Java/OpenMP Übersetzer Java Bytecode + Annotationen Abstrakte Kernels Compute Device Manager GPU/CPU Übersetzer Methoden JVM-JIT Übersetzungszeit Laufzeit Transparente Nutzung von Multi-GPU Cluster unter Java/OpenMP Thorsten Blaß 06.04.2011 Folie 5

JaMP-Sprache Der Allokations-Abschnitt sammelt Informationen für die Datenverteilung //#omp alloc_sec_start //#omp alloc_sec_end //#omp managed(sourceimage) int[][] sourceimage = new int[height][width]; //#omp managed(dstimage) int[][] dstimage = new int[height][width]; Übersetzer ersetzt das angegebene Array durch eine Instanz eines Array-Packages Zwei-dimensionale //#omp parallel for nest(2) parallele Schleife for(int i = 0; i < height; i++){ for(int j = 0; j < width ; j++){ dstimage[i][j] = srcimage[i][j] + Math.sqrt(i); } } Funktionen werden durch eine an die Hardware angepasste ersetzt Transparente Nutzung von Multi-GPU Cluster unter Java/OpenMP Thorsten Blaß 06.04.2011 Folie 6

Ausblick Motivation Einführung Java/OpenMP (JaMP) JaMP Sprache Architektur Compute Device Architecture Cluster Array Package Optimierungen Leistung des Frameworks Transparente Nutzung von Multi-GPU Cluster unter Java/OpenMP Thorsten Blaß 06.04.2011 Folie 7

JaMP - Architektur JaMP Cluster Array Package Compute Kernel Manager MPI Threads OpenCL CUDA Transparente Nutzung von Multi-GPU Cluster unter Java/OpenMP Thorsten Blaß 06.04.2011 Folie 8

Compute Kernel Manager (CKM) API zur generischen Programmierung von Kerneln Abstrahiert von konkreten Beschleunigern (Device) Speicherverwaltung Generiert aus der CKM Sprache Device spezifische Kernel Ruft Kernel auf einer Menge von Devices auf Ausmessen der Devices beim Start Gemessen werden: Nachrichten-Transfers, Kernellaufzeiten Ergebnisse werden in Speed-up umgerechnet Verbirgt MPI und RPCs (entfernte) Kopieroperationen zwischen Devices (entfernte) Übersetzung der Kernels Transparente Nutzung von Multi-GPU Cluster unter Java/OpenMP Thorsten Blaß 06.04.2011 Folie 9

Cluster Array Package (CAP) Verteilt die Daten über die verfügbaren Devices: Stellt Zugriffsmethoden (get/set) zur Verfügung Kopieroperationen Array-Elemente werden in Chunks verwaltet Chunks werden einzelnen Devices zugeordnet Drei Array-Typen Repliziertes Array Sicherstellen der Datenkonsistenz Partitioniertes Array Datenverteilung auf die verfügbaren Devices Wrapper Array Verbirgt tatsächlich instantiierten Array-Typ Transparente Nutzung von Multi-GPU Cluster unter Java/OpenMP Thorsten Blaß 06.04.2011 Folie 10

Cluster Array Package (CAP) Repliziertes Array Wird genutzt bei zufälligen Adressierungsmustern //#omp parallel for for(int i = 0; i < x; i++){ a[2 * i + 8] =. } Jedes Device erhält eine lokale Kopie des Arrays Alle Chunks enthalten die selben Daten Datenkonsistenz muss sichergestellt werden Jeder Knoten benötigt einen zusätzlichen Chunk (Urbild) Device verändert Element Chunks unterscheiden sich Erzeugen eines Diff: Vergleiche Chunks gegen lokale Kopie Aktualisiere alle lokalen Chunks und sende Diffs zu allen anderen Knoten Jeder Knoten führt die gleichen Operationen aus Übersetzer fügt Anweisungen zur Sicherstellung der Datenkonsistenz ein Transparente Nutzung von Multi-GPU Cluster unter Java/OpenMP Thorsten Blaß 06.04.2011 Folie 11

Cluster Array Package - Partitioniertes Array Wird verwendet wenn daten-paralleles Rechnen möglich ist Partitionierungsvektor zur Bestimmung der partitionierbaren Dimensionen //#omp parallel for for(int i = 0; i < x; i++){ //#omp parallel for for(int i = 0; i < x; i++){ a[i] =. for(int j = 0; j < y; j++){ a[i][2*j+i] =. } } } Partitionierungsvektor [1] a[i][2*j+1] Partitionierungsvektor [1,0] Boundaries helfen, den Kommunikationsaufwand beim Zugriff auf Nachbarelemente zu reduzieren a[i+1], a[i-1], Transparente Nutzung von Multi-GPU Cluster unter Java/OpenMP Thorsten Blaß 06.04.2011 Folie 12

Cluster Array Package Partitioniertes Array Jedes Device erhält nur einen Teilbereich eines Arrays Benötigt Partitionierung-Algorithmus Rechenleistung eines Devices entscheidet über die Größe der zugeteilten Indexmenge CAP bietet drei Partitionierungs-Algorithmen Partitionieren nach Rechenleistung Verzögerte Partitionierung Maximale Speicherauslastung Transparente Nutzung von Multi-GPU Cluster unter Java/OpenMP Thorsten Blaß 06.04.2011 Folie 13

Cluster Array Package Partitioniertes Array Partitionierung nach Rechenleistung Wähle partitionierbare Dimension (Partitionierungsvektor) Aufsummieren aller Speed-ups Summe wird als verfügbare (virtuelle) Devices interpretiert Partitionierbare Dimension wird durch Anzahl der virtuellen Devices geteilt virtuelle chunks pro Device Virtuelle Devices werden auf die Realen abgebildet (konsumierten dabei die virtuellen Chunks) Speedup = 1 Partitionierungsvektor [1,1] 3 Virtuelle Devices Speedup = 2 Transparente Nutzung von Multi-GPU Cluster unter Java/OpenMP Thorsten Blaß 06.04.2011 Folie 14

Cluster Array Package Partitioniertes Array Verzögerte Partitionierung Arbeitet wie Partitionierung nach Speed-up berücksichtigt zusätzlich komplett benötigten Speicher Bevor die Partitionierungs-Informationen berechnet werden, findet eine Überprüfung statt ob ALLE Arrays in den Speicher des Devices passen Versucht ein Device mehr virtuelle Chunks zu konsumieren als in den Speicher passen wird die Größe angepasst Optimiert für Speicherauslastung Nutzt so wenig Devices wie möglich Devices sind aufsteigend nach ihrem speed-up sortiert Speicher eines Devices wird komplett gefüllt Transparente Nutzung von Multi-GPU Cluster unter Java/OpenMP Thorsten Blaß 06.04.2011 Folie 15

Motivation Adaptive Rekonfiguration Frage: Wieviele Knoten (und welche Devices) soll ich für mein Programm benutzen? Antwort hängt von der Applikation ab: Zuviele Knoten können zu hohen Kommunikationskosten führen Zu wenige Knoten können zu einer Überlastung der Knoten führen Geeignete Devices hängen von der Komplexität des Kernels ab Heuristik generiert verschiedene Device-Mengen zu definierten Zeitpunkten (z.b. jeden n-ten parallelen Aufruf) vor einem parallelen Aufruf Misst die Zeit, die eine Kernel-Ausführung benötigt Rekonfiguriert Arrays auf neue Device-Menge Transparente Nutzung von Multi-GPU Cluster unter Java/OpenMP Thorsten Blaß 06.04.2011 Folie 16

Adaptive Rekonfiguration Benötigt Heuristik, um zu entscheiden wie/wann neue Device-Mengen erstellt werden Starte mit einem Knoten und füge nachfolgend neuen hinzu Starte mit allen Knoten und entferne jeweils einen Knoten werden hinzugefügt bzw. entfernt, wenn der Speed-up unterhalb einer vorgegebenen Schranke bleibt das Verhältnis zwischen Laufzeit/Kommunikations- Aufwand eine bestimmte Schranke überschreitet Heuristik wird zur Laufzeit ausgewählt Analysiere verfügbare Devices Enthält Device-Menge nur einen Knoten: Hinzufügen Enthält Device-Menge alle Knoten: Entferne Transparente Nutzung von Multi-GPU Cluster unter Java/OpenMP Thorsten Blaß 06.04.2011 Folie 17

Adaptive Rekonfiguration Implementiert in 3 Modulen: 1) Virtueller Cluster Verwaltet Devices in virtuellen Cluster-Knoten Gegenwärtig benutze und verfügbare Devices Heuristik: Hinzufügen oder entfernen 2) Adaptive Info Ausgangspunkt für Rekonfiguration Vergleicht aktuelle Device-Menge gegen bisher Beste Liefert better, worse, equal zurück Generiert nächste Device-Menge Modelliert als endlicher Zustandsautomat Transparente Nutzung von Multi-GPU Cluster unter Java/OpenMP Thorsten Blaß 06.04.2011 Folie 18

Adaptive Rekonfiguration Heuristiken Implementieren Methoden... die entscheiden wie eine Device-Menge in einem bestimmten Zustand verändert wird wie die Device-Menge gebildet wird Definieren, welche Devices berücksichtigt werden sollen (z.b nur GPUs, nur CPUs, alles) Transparente Nutzung von Multi-GPU Cluster unter Java/OpenMP Thorsten Blaß 06.04.2011 Folie 19

Ausblick Motivation Einführung Java/OpenMP (JaMP) JaMP Sprache Architektur Compute Device Architecture Cluster Array Package Optimierungen Leistung des Frameworks Transparente Nutzung von Multi-GPU Cluster unter Java/OpenMP Thorsten Blaß 06.04.2011 Folie 20

Performance Zusammensetzung der Laufzeit Matrix-Multiplikation (2048x2048) 1,7 s Kernellaufzeit Speichermanagement Übersetzungszeit 0,3 s 3,7 s Transparente Nutzung von Multi-GPU Cluster unter Java/OpenMP Thorsten Blaß 06.04.2011 Folie 21

Speed-up gegenüber einem Knoten mit CPU CPU GPUs CPU + GPU CPU GPUs CPU + GPU CPU GPUs CPU + GPU 350 250 350 300 250 200 300 250 Speed-up 200 150 100 50 Speed-up 150 100 50 Sped-up 200 150 100 50 0 1 2 4 8 Nodes Edge Detection 0 1 2 4 8 Nodes Matrix Multiplikation 5000x5000 0 1 2 4 8 Nodes Black Scholes CPU GPUs CPU + GPU 180 160 140 120 Speed-up 100 80 60 40 20 0 1 2 4 8 Nodes Seure Function Evaluation Transparente Nutzung von Multi-GPU Cluster unter Java/OpenMP Thorsten Blaß 06.04.2011 Folie 22

Zusammenfassung Java's write-once-run-everywhere -Ansatz bleibt erhalten Anwender parallelisiert einen Algorithmus nicht für eine spezielle Architektur Vorhandener Code kann mit minimalen Aufwand parallelisiert werden JaMP ermöglicht die transparente Nutzung von Beschleunigern JaMP ermöglicht die Nutzung von Clustern ohne zusätzlichen Aufwand für den Programmierer JaMP sucht die für einen Algorithmus geeignetste Kombination von Beschleunigern / Knoten aus Ausstehende Erweiterungen: Objekte, Exceptions,... Transparente Nutzung von Multi-GPU Cluster unter Java/OpenMP Thorsten Blaß 06.04.2011 Folie 23