Universität Karlsruhe (TH) Forschungsuniversität · gegründet 1825 Lehrstuhl für Programmiersysteme Fakultät für Informatik Software Transactional Memory:

Slides:



Advertisements
Ähnliche Präsentationen
M a r c – o l i v e r p a h l Informatik I – Kapitel 7 Klassen und höhere Datentypen Zusammenfassung des Kapitel 7 Küchlin, Weber, Einführung in die Informatik,
Advertisements

der Universität Oldenburg
der Universität Oldenburg
Klassen - Verkettete Liste -
DVG Dateien Dateien. DVG Dateien 2 Die Klasse File Die Klasse File stellt die Verbindung zwischen dem Filesystem des Rechners und dem.
Einführung in die Programmierung Ausführbare Klassen
Zusammenfassung des Kapitels 8
3 Prozessverwaltung  sieht einen Prozess als Objekt der Verwaltung,
Verteilte Software - Java - Prozedurale Programmierung 1
Ausnahmen HS Merseburg (FH) WS 06/07.
Threads Richard Göbel.
Sortieren mit Binären Bäumen
Java: Dynamische Datentypen
Listen Richard Göbel.
FH-Hof Fehlerbehandlung Richard Göbel. FH-Hof Konzept Fehler können mit dem Operator throw einer übergeordneten Funktion signalisiert werden. Parameter.
IF-ELSE-IF-Ketten Weiter mit PP..
WHILE - Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm.
FOR Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm.
DO...WHILE Anweisung.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (13 – Offenes Hashing) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (05 – Elementare Datenstrukturen) Prof. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 6 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Benötigte Applets Startseite: in HTML-Format Applet auf der Startseite Das Applet, das auf der Startseite geladen wird, wird die vier Buttons und die eine.
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 6 Model-View-Controler als Grundlage für Nutzerschnittstellen Sommersemester 2003 Lars Bernard.
Programmieren mit JAVA
PRJ 2007/1 Stefan Dissmann Motivation Problem: Benutztes Objekt kennt den Kontext seiner Nutzung nicht. Daher kann es in besonderen Situationen keine Entscheidung.
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
Listen Prof. Dr. Christian Böhm in Zusammenarbeit mit Gefei Zhang
Projektplan: Fachgebiet Software Engineering Übersicht © Albert Zündorf, Kassel University.
DVG Ausnahmen. DVG Was sind Programmfehler? 4 Programm erzielt gar kein Ergebnis. 4 Berechnetes Ergebnis stimmt nicht mit dem erwarteten.
DVG Interfaces. DVG mehrfache Vererbung 4 Mehrfache Vererbung ist die Ableitung einer Klassen von mehreren anderen Klassen. –farbigerPunkt.
DVG Ausnahmen1 Ausnahmen. DVG Ausnahmen 2 Was sind Programmfehler? Programm erzielt gar kein Ergebnis. Berechnetes Ergebnis stimmt nicht.
EDV Parallelprogrammierung1 Parallelprogrammierung mit JAVA.
DVG Verkettete Listen Verkettete Listen. DVG Verkettete Listen 2 Primitive Datentypen Vorteile: –werden direkt vom Prozessor unterstützt.
Java in 9 Folien Besser: Online-Buch Go to Java 2.
Einführung in die Programmierung Datensammlung
Das Roboterprojekt Einführung Der erste Entwurf Das Thread-Konzept Hindernisse Website.
Informatikunterricht mit Java
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
Sommersemester 2004 Jan Drewnak Entwicklung und Einsatz von Geosoftware I Praktikum Sitzung 6 Sitzung 6: Model-View-Controller als Grundlage.
Einfach verkettete Listen
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Rekursive Funktionen (Fakultät)
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
Grundlagen der Programmierung
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
Style Guidelines für Java und .NET
Die Klasse String und ihre Methoden
Learning By Doing Parallelverarbeitung Multithreading (Nebenläufigkeit) Alte Idee der Parallelverarbeitung statt rein sequentieller Prozesse Parallelverarbeitung.
Programmierung von Agenten in Java: Implementierung einer Supply-Chain
Letzte Chance!!! Exceptions Thread, Runnable Synchronized Wait, notify, notifyAll Thread States Semaphoren JCSP Swing JOMP Linearizability History Amdahl‘s.
Programmiervorkurs WS 2014/15 Methoden
Java-Kurs - 8. Übung Besprechung der Hausaufgabe.
Java Syntaxdiagramme Buchstabe A B Z a z ... Ziffer
Alois Schütte Advanced System Programming 2 Interprozeßkommunikation  2.1 JVM Ablaufumgebung  2.2 Java Native Interface (JNI)  Verwendung von.
Robuste Programme durch Ausnahmebehandlung
Prof. Dr. Alois Schütte Advanced System Programming 1 Das concurrent Paket 1 Überblick 2 Lock 3 Condition 4 Queue 5 Executors.
Ausnahmen Vorlesung besteht aus zwei Teilen Programmierung (4 SWS)
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
Abteilung für Telekooperation Softwareentwicklung 2 UE WS 2008/09 SE2UE_ Ausnahmen (Exceptions)
1 // Verkettete Liste 2 // demonstriert verkettete Listen und // Rekursion // (Einfügen am "Fuß") // #include struct Liste { int Element; Liste *weiter;
Aufgaben zu Rückgabewerten
Die Klasse Vielfrass in Java
Felder in Java.
Arrays in Java Ein Array ist eine Variable, die aus einer An-zahl von Elementen des gleichen Datentyps besteht, die aufeinanderfolgend im Speicher liegen.
Grundkurs Informatik mit Java
Mit Java die Turtle steuern
Informatik Kurse
 Präsentation transkript:

Universität Karlsruhe (TH) Forschungsuniversität · gegründet 1825 Lehrstuhl für Programmiersysteme Fakultät für Informatik Software Transactional Memory: Bibliotheken und Spracherweiterungen Andreas Zwinkau IPD, Lehrstuhl Prof. Tichy

Wo liegt das Problem?

Lehrstuhl für Programmiersysteme Fakultät für Informatik 3 Zeit Das Blockadeproblem

Lehrstuhl für Programmiersysteme Fakultät für Informatik 4 Zeit Das Blockadeproblem Nicht blockierend

Lehrstuhl für Programmiersysteme Fakultät für Informatik 5 Zeit Das Blockadeproblem blockierend

Lehrstuhl für Programmiersysteme Fakultät für Informatik 6 Leistungsvergleich Quelle: Robert Ennals, Software Transactional Memory Should Not Be Obstruction-Free Bei variierendem Wettstreit in Rot-Schwarz-Bäumen sind blockierende Transaktionen schneller

Lehrstuhl für Programmiersysteme Fakultät für Informatik 7 Das Seiteneffektproblem

Lehrstuhl für Programmiersysteme Fakultät für Informatik 8 Das Seiteneffektproblem Siehe: Tim Harris, Exceptions and side-effects in atomic blocks Wann soll IO stattfinden? Wann darf ein Bankautomat das Geld auswerfen? Transaktion Ausgabe SQL Commit

Lehrstuhl für Programmiersysteme Fakultät für Informatik 9 Dynamic STM2 Java Bibliothek Flexibel Kein „lock-in“ auf eine Strategie Komponenten austauschbar Blockadefrei Also Blockadeproblem

10 Ein Blick unter die Haube

Lehrstuhl für Programmiersysteme Fakultät für Informatik 11 DSTM2: public interface Node { int getValue (); void setValue ( int value ); Node getNext (); void setNext ( Node value ); } class INode implements Node {...}

Lehrstuhl für Programmiersysteme Fakultät für Informatik 12 DSTM2: Fabrik Factory factory = dstm2.Thread.makeFactory(INode.class); Ersetze „new INode“ durch „factory.create()“ ! Die Fabrik kapselt die INode Klasse, damit der Zugriff auf Attribute gepuffert und damit transaktional wird.

Lehrstuhl für Programmiersysteme Fakultät für Informatik 13 DSTM2: Transaktion INode intSet = factory.create() result = dstm2.Thread.doit(new Callable () { public Boolean call() { return intSet.insert(value); } }); So sieht der Einsatz der transaktionalen Klasse aus

Lehrstuhl für Programmiersysteme Fakultät für Informatik 14 Multicore RunTime C/C++ Bibliothek Leistung! Nicht blockadefrei Also auch kein Blockadeproblem Fortgeschrittene Funktionalität Verschachtelte Transaktionen Signale

15 Leistung

Lehrstuhl für Programmiersysteme Fakultät für Informatik 16 Multicore RunTime: Hashtabelle Quelle: Bratin Saha et al, McRT-STM: A High Performance Software Transactional Memory System for a Multi-Core Runtime

Lehrstuhl für Programmiersysteme Fakultät für Informatik 17 Multicore RunTime: Verkettete Liste Quelle: Bratin Saha et al, McRT-STM: A High Performance Software Transactional Memory System for a Multi-Core Runtime

18 Und nun? Spracherweiterungen!

Lehrstuhl für Programmiersysteme Fakultät für Informatik 19 Übersetzung atomic ( condition ) { statements ; } boolean done = false; while (!done) { STMStart(); try { if ( condition ) { statements ; done = STMCommit(); } else { STMWait(); } } catch (Throwable t) { done = STMCommit(); if (done) { throw t; }}} So übersetzt die Harris-Fraser-STM

Lehrstuhl für Programmiersysteme Fakultät für Informatik 20 Das Seiteneffektproblem public class ExampleOutput { static PrintStream out = new PrintStream( new AtomicOutputStream(System.out)); static void print_sum(int x, int y) { atomic { int result = x + y; out.println("Result is " + result); } Callback! Quelle: Tim Harris, Exceptions and side-effects in atomic blocks

Lehrstuhl für Programmiersysteme Fakultät für Informatik 21 ATOMOΣ Java-ähnlich Minus synchronized Plus STM Verschachtelte Transaktionen Streng atomar

Lehrstuhl für Programmiersysteme Fakultät für Informatik 22 ATOMOΣ: Barriere synchronized (lock) { count++; if (count != thread_count) { lock.wait(); } else { lock.notifyAll(); } atomic { count++; } atomic { if (count != thread_count){ watch count; retry; } Implementation einer Barriere in herkömmlichem Java und in ATOMOΣ mit transaktionalem Speicher

Lehrstuhl für Programmiersysteme Fakultät für Informatik 23 ATOMOΣ: watch void watch (Address a) { VM_Thread.getCurrentThread().watchSet.add(a); } Die watch-Funktion fügt eine Speicheradresse dem watchset des aktuellen Threads hinzu.

Lehrstuhl für Programmiersysteme Fakultät für Informatik 24 ATOMOΣ: retry void retry() { [...] for (int i=0,s=watchSet.size();i<s;i++) { Address a = (Address)watchSet.get(i); open { thread.schedulerAddress = a; thread.schedulerWatch = true; } open {if(thread.schedulerWatch) for(;;);} } [...] } Die retry-Funktion startet eine Transaktion neu, sobald sich eine Variable im watch set ändert.

25 Optimierungen

Lehrstuhl für Programmiersysteme Fakultät für Informatik 26 StarJIT Existierende Optimierungen ermöglichen Neue semantische Konstrukte durch Prüfvariablen garantieren Globale Optimierungen Unveränderbare Variablen in Transaktionen ignorieren Stackvariablen ignorieren Codeerzeugung Optimierter Assemblercode für Transaktionen Quelle: Ali-Reza Adl-Tabatabai, Brian T. Lewis, Vijay Menon, Brian R. Murphy, Bratin Saha, and Tatiana Shpeisman, Compiler and runtime support for efficient software transactional memory

Lehrstuhl für Programmiersysteme Fakultät für Informatik 27 STM Haskell Main = do {... ; atomic( do { x <- delete t1 A; insert t2 A x });... } atomic :: STM a -> IO a Typisierung von „atomic“ Verhinderung von Seiteneffekten ; ist ein Operator atomic (readPort p1 `orElse` readPort p2) Alternativer Operator „orElse“

28 „Ein echter Ferrari !!!“

Lehrstuhl für Programmiersysteme Fakultät für Informatik 29 Danke für's Zuhören! Fragen?

Lehrstuhl für Programmiersysteme Fakultät für Informatik 30 Backupfolien...

Lehrstuhl für Programmiersysteme Fakultät für Informatik 31 ATOMOΣ: open Public void createOrder () { atomic { Order order = new Order(); order.setID(generateID());... } public int generateID { atomic { return id++; }} public int generateID { open { return id++; }}

Lehrstuhl für Programmiersysteme Fakultät für Informatik 32 Multicore RunTime: Sendmail Quelle: Bratin Saha et al, McRT-STM: A High Performance Software Transactional Memory System for a Multi-Core Runtime

Lehrstuhl für Programmiersysteme Fakultät für Informatik 33 public static T doIt(Callable xaction) { T result = null ; while (! Thread.stop ) { beginTransaction (); try { xaction.call result = xaction.call (); } catch (AbortedException d) { } catch (Exception e) { throw new PanicException("Unhandled exception " + e ); } if (commitTransaction ()) { return result ; }}} DSTM2: Doit Implementation