X10. Seminar Multicore Programming Uni Passau SS Alex von Rhein

Ähnliche Dokumente
X10 Performance and Productivity at Scale

Die Programmiersprache X10

Neue Sprachen für HPC: Chapel / Fortress / X10. Sarntal,Ferienakademie 2009 Programmierkonzepte für Multi Core Rechner Svetlana Nogina

Agenda. Informatik I WS05/06 Folien von Tobias Dezulian

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

Memory Models Frederik Zipp

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

Informatik. Pointer (Dynamisch) Vorlesung. 17. Dezember 2018 SoSe 2018 FB Ing - SB Umwelttechnik und Dienstleistung - Informatik Thomas Hoch 1

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

Programmieren in Java

Seminar: Multi-Core Architectures and Programming

Java Concurrency Utilities

Vorlesung Programmieren

Remote Method Invocation

Repetitorium Informatik (Java)

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 2. Teil

Gliederung. n Teil I: Einleitung und Grundbegriffe. n Teil II: Imperative und objektorientierte Programmierung

Abschnitt 7: Beispiel: Die Klasse String (Teil 1)

Just-In-Time-Compiler (2)

III.1 Prinzipien der funktionalen Programmierung - 1 -

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Referenzen. Referenzen

Programmierung in C/C++

Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types)

Abschnitt 11: Beispiel: Die Klasse String (Teil 1)

Tag 8 Repetitorium Informatik (Java)

5.4 Arrays. Oft müssen viele Werte gleichen Typs gespeichert werden. Idee: Lege sie konsekutiv ab! Greife auf einzelne Werte über ihren Index zu!

Pthreads. David Klaftenegger. Seminar: Multicore Programmierung Sommersemester

Tag 4 Repetitorium Informatik (Java)

Tag 7 Repetitorium Informatik (Java)

Java I Vorlesung 6 Referenz-Datentypen

Vorkurs Informatik WiSe 16/17

Programmiertechnik Klassenvariablen & Instantiierung

Gliederung der Folien

Crashkurs C++ - Teil 1

Programmieren Vorkurs

Effiziente Java Programmierung

Arrays. Einleitung. Deklarieren einer Array Variablen

OpenMP. Viktor Styrbul

Vorkurs Informatik WiSe 17/18

1. Referenzdatentypen: Felder und Strings. Referenz- vs. einfache Datentypen. Rückblick: Einfache Datentypen (1) 4711 r

1. Referenzdatentypen: Felder und Strings

C-to-CUDA-Compiler. Johannes Kölsch. October 29, 2012

Tag 4 Repetitorium Informatik (Java)

Organisatorisches. Neue Übungsblätter: Nur mehr elektronisch? Abgabe Di, , 14 Uhr bis Do, , 8Uhr

2.1 Visual C Express installieren Visual C Express starten Visual C Express registrieren...

JavaScript O'REILLY. Das umfassende Referenzwerk. Deutsche Übersetzung von Ralf Kuhnert, Gisbert W. Selke & Harald Selke

Programmierstarthilfe SS 2008 Fakultät für Ingenieurwissenschaften und Informatik 8. Blatt Für den 16. und

Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke

Angewandte Mathematik und Programmierung

C++ - Objektorientierte Programmierung Konstante und statische Elemente

Arrays. Theorieteil. Inhaltsverzeichnis. Begriffe. Programmieren mit Java Modul 3. 1 Modulübersicht 3

Informatik II Übung 05. Benjamin Hepp 3 April 2017

Informatik II Übung 5

Just-In-Time-Compiler (2)

Web-Techniken Einführung in JavaScript

Parameterübergabemechanismen für den Methodenaufruf

ÜBUNGS-BLOCK 7 LÖSUNGEN

Programmieren in Haskell Debugging

Programmierwerkstatt. Arrays, Pointer und Referenzen

Parallele Prozesse. Prozeß wartet

Einführung in parallele Dateisysteme am Beispiel von GPFS. Proseminar von Jakob Schmid im SS 2014

EINFÜHRUNG IN DIE PROGRAMMIERUNG

Java Referenzdatentypen genauer betrachtet

Innere Klassen. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java

Java als erste Programmiersprache

Architekturen, Werkzeuge und Laufzeitumgebungen für eingebettete Systeme

Perlkurs WS 2014/15: 08 Referenzen

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

Informatik II. Woche 10, Giuseppe Accaputo

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Tutorium 2. Strings. Skript zur Vorlesung Einführung in die Programmierung

Javakurs für Fortgeschrittene

Probeklausur Name: (c)

Programmierkurs C++ Templates & STL (1/2)

Parallele Programmiermodelle

Erste Java-Programme (Java Wiederholung & Vererbung)

Einführung: Verteilte Systeme - Remote Method Invocation -

Organisatorisches. drei Gruppen Gruppe 1: 10:10-11:40, Gruppe 2: 11:45-13:15 Gruppe 3: 13:20-14:50

Informatik 1. Sommersemester Helmut Seidl. Institut für Informatik TU München

Durch die Teil-von-Beziehung soll ausgedrückt werden, dass ein Objekt A als (physikalischer) Teil eines Objekts B angesehen wird. Insbesondere kann ei

Java-Grundkurs für Wirtschaftsinformatiker

Java I Vorlesung Nebenläufigkeit

Mobile Anwendungsentwicklung - Überblick über ios & Swift I -

12 Abstrakte Klassen, finale Klassen und Interfaces

Systeme I: Betriebssysteme Kapitel 4 Prozesse. Wolfram Burgard

Vorlesung Informatik II

Einstieg in die Informatik mit Java

Vorkurs Informatik WiSe 17/18

Einführung Verteilte Systeme - Java Threads I -

Klassenmethoden. Klassenvariablen. Für das Auslesen des Studentenzählers definieren wir eine öffentliche Klassenmethode:

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

Chapel. Andreas Simbürger. 22. Juli am Lehrstuhl für Programmierung Seminar: Multicore-Programmierung 1 / 33

Programmierung und Angewandte Mathematik

Multicore überall Testwerkzeuge für nebenläufige Anwendungen

Kapitel 9. Ausnahmebehandlung in Java. Skript zur Vorlesung Einführung in die Programmierung

Versionsupdate von V auf V We automate your success

Synchrone Botschaften

Sicherheitskritische Echtzeitsysteme mit Java

Transkript:

X10 Seminar Multicore Programming Uni Passau SS 2009 Alex von Rhein

Übersicht Hintergrund Entwurfs- Ziele Übersicht: Daten- & Kontrollstrukturen Grundlagen-Konzepte Aufbauende Konzepte Sicherheit in X10 Existierende Implementierungen 1

Hintergrund: DARPA HPC Challenge DARPA: High Productivity Computing Systems Challenge Leistungsteigerung durch Erhöhung der Taktrate nicht mehr möglich Parallele Systeme nötig Produktivität der Programme muss verbessert werden +10x Produktivität bis 2010 Produktivität der Programmierer muss verbessert werden Normale Programmierer Software Engineering Teams 2

Hintergrund: Teilnahme von IBM IBM PERCS Productive, Easy-to-use, Reliable Computing System Teilprojekte für Hardware und Software X10 als Programmiersprache des Projekts Open Source (Eclipse Public License) Ziele: Skalierbarkeit, Produktivität Eclipse- Plugin http://x10.codehaus.org/ 3

Design Ziele von X10 Sicherheit Die Sprache durch Design sicher machen Typfehler, ungesetzte Zeiger, Speicherüberläufe, Deadlocks Analysierbarkeit Ermöglicht es relativ einfach Werkzeuge für die Sprache zu entwickeln (siehe Java) Skalierbarkeit Unterstützt den Entwickler in der Entwicklung von effizienten Programmen Flexibilität Auf NUCC Systemen sollen alle Beschleunigungen genutzt werden, die die Hardware bietet. 4

X10 Fact Sheet Ausgangspunkt: State-of-the-Art OOP Java (& Scala) Klassen, Einfachvererbung Werkzeuge/ Entwicklungsumgebung Automatische Speicherbereinigung Alle Änderungen durch Ziele begründen Problematische Modelle ersetzen Threads -> Activities (Asynchron) Monitors -> Atomic Sections Barriers -> Clocks Konzepte für Parallelität Partitioned Global Address Space (PGAS) Places Distributions Multi- Dimensionale Arrays Aggregierte Operationen (Reduce, Scan) 5

Daten & Strukturen Daten X10.lang.Double, Wert Typen (Value Types) Immutable Können frei kopiert werden Referenz Typen An einen festen Speicherbereich gebunden PGAS Globale ID für jedes Objekt Nur lokal zugreifbar Verteilte Arrays Strukturen Sequentielle Kontrollstrukturen wie Java (& Scala) Strukturen um Parallelität auszudrücken Für Array-Bearbeitung Um entfernte Tasks zu erzeugen Modell für Exception Handling 6

Places & Distributions Place (virtuelle) Recheneinheit Gemeinsamer Heap Sollte Prozessoren entsprechen x10.lang.place Die (virtuellen) Places werden von der Deployment- Schicht auf die konkrete Architektur abgebildet Distribution Ordnet jedem Element einer Menge einen Place zu Können kombiniert werden Anwendung: Erzeugen von vielen verteilten Tasks mit einem Befehl Erzeugen/ Bearbeiten von verteilten Arrays x10.lang.dist.factory.unique().union(dist d).intersection(d) 7

Activities async (P) {S} Neue Activity auf Place P Führt den Block {S} aus Activities Können nur auf lokale Variablen zugreifen Können neue Activities erzeugen Root-Activity wird von X10 gestartet ( main-methode in Java) Die vier Activity- Operationen: async (P) {S} Führt Statement S aus Nicht- Blockierend Finish (P) {S} Blockiert, bis alle Activities (transitiv) beendet sind Sammelpunkt für Exceptions Future<int> f = Future (P) {E} Führt Ausdruck E aus Nicht blockierend Force f Gibt das Ergebnis von E blockierend zurück Wird in f gespeichert (keine wiederholte Auswertung) 8

Places sind virtuell! Virtuelles Konzept Deployment- Schicht Hardware- Knoten Mit X10-VM NUCC- System z.b. LAPI Hardware- Knoten Mit X10-VM Hardware 9

Das waren die Grundlagen 1. Datentypen und Strukturen wie Java 2. Places -> Abbildung auf Rechenknoten 3. Activities 4. Distributions -> Ordnet jedem Punkt einer Menge einen Place zu 10

Arrays Verteilte Arrays werden mit Distributions erzeugt Bearbeitung mit speziellen Schleifen Foreach Erzeugt für jeden Point eine Activity auf dem lokalen Place Ateach Erzeugt für jeden Point eine Activity auf dem Place, auf den die Distribution verweist (wo die Daten liegen) Ausgabe: [1] Place 0 [0] Place 0 [2] Place 0 [3] Place 0 1 Place 1 0 Place 0 3 Place 3 2 Place 2 11

Rooted Exception Model (1/2) Problem: X10 Activities werden nicht synchron beendet Die Activity A kann beendet werden, bevor die von ihr mit async aufgerufene Activity B beendet ist Wer fängt dann Exceptions, die von B geworfen werden? Lösung X10 Rooted Exception Model 12

Rooted Exception Model (2/2) Finish-Aufrufe sind Sammelpunkte für Exceptions Jede Activity hat eine root Activity Ein X10-Programm wird mit finish main( ) gestartet 13

Atomic Blocks Unconditional Atomic Blocks Eingeleitet mit Schlüsselwort atomic{} Nur einfache Berechnungen Nur lokaler Speicher Keine blockierenden Aufrufe oder async Alle Speicherzugriffe müssen statisch zu bestimmen sein Exakter Algorithmus zur Konfliktauflösung steht noch nicht fest Conditional Atomic Blocks (mindestens) ein Guard (nur Feldzugriff oder Konstante) Überprüfung der Guard und Ausführung des Blocks werden unteilbar durchgeführt Deadlocks möglich! 14

Clocks async clocked (c1, c2, ) { } Synchronisation von Activities Activities können bei einer (oder mehreren) Clocks (x10.lang.clock) registriert sein Registieren nur bei Erzeugung der Activity Weiterschalten mit c.next() (blockierend) oder c.resume() (nicht- blockierend) Aufruf von next()endet erst, wenn alle registrierten Activities weitergeschaltet haben Activities können sich auch abmelden (c.drop()) Ersetzen MPI-Barriers Flexibler als Barriers, die immer auf einer festen Untermenge der Prozessoren bestehen Next() schaltet alle Clocks, auf denen die Activity registriert ist Deadlock-Freiheit wird garantiert (mit Beweis!) 15

Deadlock- Freiheit (für Clocks) Beweisidee: Annahme: ein Programm steckt fest (Deadlock) Also haben alle Activities auf (verschiedenen) Clocks next() aufgerufen Darum sind auch alle Clocks freigeschaltet verwendet das next() alle Clocks einer Activity schaltet Also können alle Activities weiterrechnen Kein Deadlock 16

Abkürzungen, implizite Statements await (c) => when (c) {;} at (p) e => (future (p) e).force; Erlauben kürzere Programme Bessere Lesbarkeit/Wartbarkeit?? Das hängt von der Menge der neuen Schlüsselwörter ab Automatisches Einfügen von at(p)e bei Zugriff auf Objekte auf anderen Places? 17

Abschluss Sicherheit in X10 Existierende Implementierungen, Versionen 18

Sicherheit in X10 Man kann in X10 Fehler erzeugen Deadlocks, Null Pointer Exception, Wenn man unbedingt will Beispiel: Nullable <T> hat alle Werte von T und null X10 versucht nicht dem Programmierer zu verbieten Fehler zu machen X10 versucht zu helfen die Fehler zu vermeiden durch Übersichtliche Sprache Vorgaben, welche Konstrukte wie zu benutzen sind Werkzeugunterstützung für Entwicklung und Debugging 19

Implementierungen Version 1.5 Im wesentlichen Java-Syntax, Diese Präsentation X10DT-Plugin für Eclipse Version 1.73 (24. März 09) Scala-Syntax eingeführt Version 1.75 (26. Juni 09) Implementierungen für Java, C, C++ für Linux X10DT Plugin aktualisiert 20

Überblick Ziele der Sprache Motivation Places Distributions Activities Arrays Rooted Exception Model Clocks Atomic Blocks Sicherheit Implementierungen Diese Frage ist zu gut, um sie mit einer Antwort zu verderben. Robert Koch Über Fragen, die ich nicht beantworten kann, zerbreche ich mir nicht den Kopf. Konrad Zuse 21