Mit Virtuellen Maschinen
PD Stefan Bosse
Universität Bremen - FB Mathematik und Informatik
PD Stefan Bosse - VPP - Einführung in die verteilte und parallele Datenverarbeitung ::
Was unterscheidet verteilte und parallele Datenverarbeitung?
Welche Eigenschaften besitzen verteilte gegenüber parallelen Systemen?
PD Stefan Bosse - VPP - Einführung in die verteilte und parallele Datenverarbeitung :: Performanz
PD Stefan Bosse - VPP - Einführung in die verteilte und parallele Datenverarbeitung :: Performanz
Aber sind solche Masszahlen für uns hilfreich?
PD Stefan Bosse - VPP - Einführung in die verteilte und parallele Datenverarbeitung :: Performanz
https://dl.acm.org/doi/pdf/10.1145/358274.358283 Weicker, R. P. (1984). Dhrystone: a synthetic systems programming benchmark. Communications of the ACM, 27(10), 1013-1030
PD Stefan Bosse - VPP - Einführung in die verteilte und parallele Datenverarbeitung :: Performanz
Weicker, R. P. (1984) Analyse der prozentualen Verteilung von verschiedenen Anweisungen in verschiedenen Programmiersprachen
PD Stefan Bosse - VPP - Einführung in die verteilte und parallele Datenverarbeitung :: Performanz
Führe den Dhrystone Benchmark Test auf verschiedenen Rechnern und verschiedenen VM (und native C Version) aus. VMs: JavaScript, Python, Lua
Ergebnisse:
PD Stefan Bosse - VPP - Einführung in die verteilte und parallele Datenverarbeitung :: Terminologie
PD Stefan Bosse - VPP - Einführung in die verteilte und parallele Datenverarbeitung :: Verteilte vs. Parallele Systeme
Verteiltes System
Ein verteiltes System ist eine System aus lose gekoppelten Prozessoren oder Computern, die über ein Kommunikationsnetzwerk miteinander verbunden sind (Multicomputer).
PD Stefan Bosse - VPP - Einführung in die verteilte und parallele Datenverarbeitung :: Verteilte vs. Parallele Systeme
Paralleles System
Ein paralleles System ist ein Zusammenführung von stark gekoppelten Prozessoren (Multiprozessoren)
Man unterscheidet: Mehrkern und Mehrprozessor Rechner
PD Stefan Bosse - VPP - Einführung in die verteilte und parallele Datenverarbeitung :: Verteilte vs. Parallele Systeme
1
PD Stefan Bosse - VPP - Einführung in die verteilte und parallele Datenverarbeitung :: Verteilter Speicher
computing.llnl.gov
PD Stefan Bosse - VPP - Einführung in die verteilte und parallele Datenverarbeitung :: Geteilter Speicher
Unified Memory Architecture
Non Unified Memory Architecture
PD Stefan Bosse - VPP - Einführung in die verteilte und parallele Datenverarbeitung :: Speichermodell und Speicherarchitekturen
Das Speichermodell und die Speicherarchitektur einer Rechneranlage bestimmen wesentlich über die Performanz und Skalierbarkeit von paralleler und verteilter Datenverarbeitung!
PD Stefan Bosse - VPP - Einführung in die verteilte und parallele Datenverarbeitung :: Speicherhierarchie
S(M)=s1(m1)→s2(m2)→..→sk(mk)
PD Stefan Bosse - VPP - Einführung in die verteilte und parallele Datenverarbeitung :: Speicherhierarchie
Warum gibt es ein hierarchisches Speichersystem?
Je größer die Speicherkapazität eines Speichermodules ist, desto langsamer ist der Speicherzugriff. Daher unterschiedliche Ebenen mit unterschiedlichen Größen und Zugriffszeiten (Cachekonzept)
PD Stefan Bosse - VPP - Einführung in die verteilte und parallele Datenverarbeitung :: Verteilte Systeme
PD Stefan Bosse - VPP - Einführung in die verteilte und parallele Datenverarbeitung :: Verteilte Systeme
PD Stefan Bosse - VPP - Einführung in die verteilte und parallele Datenverarbeitung :: Parallele Systeme
Zerlegung (Partitionierung) eines sequenziellen Algorithmus oder eines Programms in parallele Tasks (Prozesse) → Parallele Komposition
Ausführung der Prozesse parallel (nebenläufig und ggfs. konkurrierend) auf mehreren Verarbeitungseinheiten (u. A. generische programmgesteuerte Prozessoren)
PD Stefan Bosse - VPP - Einführung in die verteilte und parallele Datenverarbeitung :: Parallele Systeme
Def. Latenz: Gesamte oder Teilbearbeitungszeit eines Datensatzes
Def. Datendurchsatz: Anzahl der verarbeiteten Datensätze pro Zeiteinheit
PD Stefan Bosse - VPP - Einführung in die verteilte und parallele Datenverarbeitung :: Parallele Systeme
Latenz und Bandbreite sind zunächst unabhängig!
Pipelining kann die Bandbreite erhöhen (nur sinnvoll bei Datenströmen), aber nicht die Latenz!
Parallele Tasks können die Latenz verringern
PD Stefan Bosse - VPP - Einführung in die verteilte und parallele Datenverarbeitung :: Parallele Systeme
Parallelität und Nebenläufigkeit
Konkurrenz
PD Stefan Bosse - VPP - Einführung in die verteilte und parallele Datenverarbeitung :: Parallele Systeme
blog.golang.org (Links) Zeitlich überlappende parallele Ausführung von Datenverarbeitung (Rechts) Zeitlich versetzte und synchroniserte Datenverabeitung mit geteilten Ressourcen und Konkurrenz
PD Stefan Bosse - VPP - Einführung in die verteilte und parallele Datenverarbeitung :: Parallele Systeme
(Links) Zeitlich überlappende parallele Ausführung von Datenverarbeitung (Rechts) Zeitlich versetzte und synchroniserte Datenverabeitung mit geteilten Ressourcen und Wettbewerb (Konkurrenz)
PD Stefan Bosse - VPP - Einführung in die verteilte und parallele Datenverarbeitung :: Konkurrenz (Wettbewerb)
PD Stefan Bosse - VPP - Sequenzielle Programmierung mit Lua :: Konkurrenz (Wettbewerb)
Lua ist eine einfach zu erlernende sequenzielle Programmiersprache für Klasse 1/2/3 Interpreter und Skriptprogrammierung
Lua bringt aber auch wichtige Konzepte für die parallele Programmierung mit: Anonyme Funktionen, Funktionale Ausdrücke, Programmflussblockierung
PD Stefan Bosse - VPP - Sequenzielle Programmierung mit Lua :: Lua :: Daten und Variablen
Variablen werden mit dem Schlüsselwort local
definiert → Erzeugung eines Datencontainers!
Es gibt keine Typendeklaration in Lua! Dynamische Typisierung zur Laufzeit. Kerndatentypen:
Tcore={number, boolean, table, string, function, nil}
Alle Variablen sind polymorph und können alle Werttypen aufnehmen (auch dynamisch wechselnd zur Laufzeit).
Bei der Variabledefinition kann ein Ausdruckswert zugewiesen werden
local v = ε; v = ε; u = ε(v);
Definition von lokalen Variablen und Verwendung in Anweisungen und Ausdrücken
PD Stefan Bosse - VPP - Sequenzielle Programmierung mit Lua :: Lua :: Daten und Variablen
PD Stefan Bosse - VPP - Sequenzielle Programmierung mit Lua :: Lua :: Funktionen
Funktionen können mit einem Namen oder anonym definiert werden
Funktionen sind Werte 1. Ordnung → Funktionen können Variablen oder Funktionsargumenten zugewiesen werden
Eine Funktion kann einen Wert mit der return
Anweisung zurückgeben. Ohne explizite Wertrückgabe → undefined
Es wird nur Call-by-value Aufruf unterstützt - jedoch werden Objekte, Funktionen und Arrays als Referenz übergeben; Parameter pi sind an Funktionsblock gebunden
function foo (p1,p2,..) local p; statements; return εend ⇒foo(ε1,ε2,..)
Funktionsdefinition und Anwendung
PD Stefan Bosse - VPP - Sequenzielle Programmierung mit Lua :: Lua :: Funktionen
Da in Lua Funktionen Werte erster Ordnung sind können
return
)Und Funktionsaufrufe können geschachtelt und rekursiv sein:
function f(x) return ε(x) endfunction g(x) return f(ε(x)) endfunction fac(n) if n>1 then return n*fac(n-1) else return n endx=g(f(ε))
function (..) .. end
definiert werden die entweder einer Variablen als Wert oder als Funktionsargument übergeben werden:local foo = function (pi) return ε(pi) enda = T{1,2,3}b = a:map(function(elem,index) return ε(elem,index) end)
PD Stefan Bosse - VPP - Sequenzielle Programmierung mit Lua :: Lua :: Funktionen
PD Stefan Bosse - VPP - Sequenzielle Programmierung mit Lua :: Lua :: Datenstrukturen
In Lua sind Objekte universelle Datenstrukturen (sowohl Datenstrukturen als auch Objekte) die mit Hashtabellen implementiert werden. Arrays werden in Lua ebenfalls als Hashtabelle implementiert!. D.h. Objekte == Datenstrukturen == Arrays == Hashtabellen.
Es gibt kein nutzerdefinierbares Typensystem in Lua.
Eine Datenstruktur kann jederzeit definiert und verändert werden (d.h. Attribute hinzugefügt werden)
local dataobject = { a=ε, b=ε, .. f=function () .. ed}..dataobject.c = ε
PD Stefan Bosse - VPP - Sequenzielle Programmierung mit Lua :: Lua :: Datenstrukturen
Auswahl eines Arrayelements: array[index]
Auswahl eines Datenobjektelements (Attribut): dataobject.attribute
Dadurch dass Objekte und Arrays mit Hashtabellen implementiert (d.h. Elemente werden durch eine Textzeichenkette referenziert) werden gibt es verschiedene Möglichkeiten auf Datenstrukturen und Objektattribute zuzugreifen:
dataobject.attribute ↔ dataobject["attribute"] ↔array[index] ↔ array["attribute"]
Lua Äquivalenz Array und Datenstruktur
local data = { 1,2,3,4 }local complex = { r=1, i=-1 }
Lua Datenobjekte
PD Stefan Bosse - VPP - Sequenzielle Programmierung mit Lua :: Lua :: Objekte
Objekte zeichnen sich in der objektorientierten Programmierung durch Methoden aus mit der ein Zugriff auf die privaten Daten (Variablen) eines Objekts möglich wird.
In Lua kann auf Variablen eines Objekts (die Attribute) immer direkt zugegriffen werden.
Attribute können Funktionen sein - jedoch können die Funktionen nicht wie Methoden direkt auf die Daten des Objektes zugreifen.
Daher definiert man Methoden über Prototypenerweiterung in Lua.
Die Methoden können über die self
Variable direkt auf das zugehörige Objekt zugreifen (also auch auf die Variablen/Attribute)
Es gibt eine Konstruktionsfunktion (Muster über class
Funktion erzeugbar) für solche Objekte mit Prototypendefinition der Methoden
Objekte werden mit dem new
Operation durch die Konstruktionsfunktion erzeugt.
PD Stefan Bosse - VPP - Sequenzielle Programmierung mit Lua :: Lua :: Objekte
constructor=Class() -- Alt: class()function constructor:init (pi) self.x=ε ..endfunction constructor:method (..) { self.x=ε; ..}...local obj = constructor:new(..);obj:method(..)
Lua Objektklassen mit Definition einer Konstruktorfunktion, Objektinstanziierung, und Methodenanwendung
PD Stefan Bosse - VPP - Sequenzielle Programmierung mit Lua :: Lua :: Objekte
PD Stefan Bosse - VPP - Sequenzielle Programmierung mit Lua :: Zusammenfassung