PD Stefan Bosse
Universität Bremen, FB Mathematik & Informatik
SS 2020
Version 2020-04-30 sbosse@uni-bremen.de |
Ein verteiltes System ist eine Sammlung von lose gekoppelten Prozessoren oder Computern, die über ein Kommunikationsnetzwerk miteinander verbunden sind (Multicomputer).
Ein paralleles System ist eine Sammlung von stark gekoppelten Prozessoren (Multiprozessoren)
Verteilter Speicher
| Unified Memory Architecture
| Non Unified Memory Architecture
[computing.llnl.gov] |
Historisch basierend auf Netzwerk-Betriebssystemen (z. B. Linux-Clustern): Benutzer sind sich der Vielzahl von Maschinen bewusst!
telnet
, ssh
), Remote Desktop (Windows), Dateitransfer (FTP
, SSH
), Netzwerk Dateisystem (NFS
)
Ein Verteiltes Betriebssystem verbirgt die einzelnen Maschinen: Benutzer sind sich der Vielzahl von Maschinen nicht bewusst!
[Tanenbaum]
|
|
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)
Def. Latenz: Gesamte oder Teilbearbeitungszeit eines Datensatzes
Def. Datendurchsatz: Anzahl der verarbeiteten Datensätze pro Zeiteinheit
Latenz und Bandbreite sind zunächst unabhängig!
Pipelining kann die Bandbreite erhöhen (nur Sinnvoll bei Datenströmen)
Parallele Tasks können die Latenz verringern
Man unterscheidet: Parallele Rechnerarchitektur und parallele Datenverarbeitung
Steigerung der Energieeffizienz von mikroelektronischen Systemen:
Skalierung von parallelen Rechnern auf reine Digitallogiksysteme für anwendungsspezifische Lösungen kann deutliche Reduktion der Hardware-Komplexität und der elektrischen Leistungsaufnahme bedeuten!
Digitale Bildverarbeitung und automatische Bildinterpretation (Vision)
Datenkompression (Video, mpeg)
Komplexe Steuerungssysteme mit großer Anzahl von Freiheitsgraden, wie z.B. Positionierungssteuerung von Robotergelenken und Maschinen
Kommunikation, z. B. nachrichtenbasiertes Routing
Kryptoverfahren
Parallele numerische Verfahren, wie z. B. Lösung von Differentialgleichungen (Strömungsmechanik, Elektromagnetische Wellenausbreitung, Wetter- und Klimamodelle)
Für sequenzielle Datenverarbeitung existieren generische programmgesteuerte Rechneranlagen (von-Neumann Architektur), die die meisten sequenziellen Algorithmen effizient ausführen können.
Das Programm besteht dabei aus einer Vielzahl elementarer einfacher Maschinenbefehle → Sequenzielle Komposition
Es gibt keine generischen Rechneranlagen und Architekturen für parallele Datenverarbeitung
Parallele Algorithmen kann man klassifizieren.
Die Klasse bestimmt die Rechnerarchitektur, die diese Algorithmen effizient verarbeiten können.
Parallelität und Nebenläufigkeit
| Konkurrenz
|
[blog.golang.org]
Parallele und verteilte Datenverarbeitungssysteme vereinen Nebenläufigkeit und Konkurrenz
Bei der sequenziellen Datenverarbeitung gibt es einen Algorithmus, der durch ein Programm implementiert wird, das durch einen Prozess auf einem Prozessor ausgeführt wird.
Das Programm besteht aus einer Sequenz von Operationen die exakt in der Reihenfolge hintereinander ausgeführt werden.
Bei einem parallelen Programm findet eine Partitionierung in Unterprogramme statt, die von mehreren Prozessen i.A. auf verschiedenen Prozessoren ausgeführt werden.
Drei Phasen einer parallelen Programmausführung:
Was könnte noch fehlen?
Zelluläre Automaten besitzen diskrete Zustände und ändern ihren Zustand nur zu diskreten Zeitpunkten
Einfachstes paralleles bzw. eher verteiltes Berechnungsmodell → Verteilter Speicher mit expliziter Kommunikation!
Netzwerk aus einfachen kommunizierenden Rechnern (Zellen)
Eine Zelle besitzt eine endliche (kleine) Menge von Zuständen σ = { s1,..,sn}.
Eine Berechnung mit Eingabe- und internen Daten (Perzeption und innerer Zustand) führt i.A. zu einer Änderung des Zustandes der Zelle → es gibt einen Zustandsübergang
Übergangsregeln Φ können aus einfachen arithmetischen Operationen (Funktionen) bestehen, und beziehen den Zustand der Zellen aus der Nachbarschaft N(i,j)={σ (i ± Δi, j ± Δj) | Δi ≠ 0 ∨ Δj ≠ 0} mit ein (durch Kommunikation):
Betrachtet man den ZA als verteilten Rechner:
Betrachtet man den ZA als Simulator:
Es gibt keinen gemeinsamen globalen Speicher; durch die Kommunikation mit den Nachbarn (ersteinmal nur lesender Zugriff auf Nachbarspeicher) erhält man lokalen Gruppenspeicher (glokaler Bereich)
Eine Zelle des ZA ist ein endlicher Zustandsautomat
Ein Zustandsautomat hat einen Kontrollzustand γ und Datenzustand δ, d.h., σ(t)=〈γ,δ〉(t)
Rein “funktionale” Automaten besitzen nur einen Datenzustand der sich durch eine Übergangsfunktion schrittweise ändert (einfachste Zelle), d.h., σ(t)=δ(t)
Das Problem: Anders als bei klassischen Algorithmen sind diese Regeln nicht bekannt! Diese Transformationsregeln werden daher häufig gelernt (d.h. die geeigneten Regeln z.B. für Kantentendetektion aus der Menge aller möglichen Kombination von Pixeloperationen ausgewählt)
model = { width: 100, height: 100, neighbors: 4, cell : { state : { x:0, xold:0 }, before : function () { xold=x }, activity : function (neighbors) { x=f(xold,neighbors) }, after : function () { ... }, color : function () { return color(x) }, // visual size: 6, // visual } }