Verteilte und Parallele Programmierung

PD Stefan Bosse
Universität Bremen, FB Mathematik & Informatik
SS 2020
Version 2020-04-30

Einführung in die verteilte und parallele Datenverarbeitung


Verteilte vs. Parallele Systeme

Verteiltes System

Ein verteiltes System ist eine Sammlung von lose gekoppelten Prozessoren oder Computern, die über ein Kommunikationsnetzwerk miteinander verbunden sind (Multicomputer).

  • Speichermodell: Verteilter Speicher Jeder Prozessor verfügt über privaten Speicher
  • Kommunikation: Nachrichtenbasiert über Netzwerke
  • Ressourcen: Nicht direkt geteilt
Paralleles System

Ein paralleles System ist eine Sammlung von stark gekoppelten Prozessoren (Multiprozessoren)

  • Speichermodell: Gemeinsamer Speicher
  • Kommunikation: Direkt über elektrische Signale Switched Network (Kreuzschiene) | Bus Punkt-zu-Punkt | Punkt-zu-N-Netzwerke
  • Ressourcen: Gemeinsam genutzt (Bus, Speicher, IO)

Verteilte vs. Parallele Systeme

figdspa


Abb. 1. Taxonomie von verteilten und parallelen Systemen [1]

Verteilte vs. Parallele Systeme

Verteilter Speicher

  • Zugriff auf Speicher erfordert Netzwerkkommunikation
  • Vorteil: Speicher ist skalierbar mit Anzahl der Prozessoren
  • Nachteil: Langsamer Speicherzugriff zwischen Prozessen


figdismem

Unified Memory Architecture

  • Symmetrisches Multiprocessing (SMP)
  • Vorteil: Konstante Zugriffszeit auf Speicher
  • Vorteil: Schneller Speicherzugriff zwischen Prozessen

figuma

Non Unified Memory Architecture

  • Vorteil: Clustering von SMPs
  • Nachteil: Ungleiche Zugriffszeiten auf Speicher





fignuma[computing.llnl.gov]

Verteilte Systeme

  • Historisch basierend auf Netzwerk-Betriebssystemen (z. B. Linux-Clustern): Benutzer sind sich der Vielzahl von Maschinen bewusst!

    • Tools: Remote Login (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!

    • Zugriff auf entfernte Ressourcen ähnlich wie der Zugriff auf lokale
    • Übertragung von Prozessen (Berechnung) und Programmcode (anstatt Daten)

fignetos[Tanenbaum]

Verteilte Systeme

Geschichte der Verteilten Betriebssysteme (DOS)

figDOShistory


Abb. 2. Zeitschiene einiger ausgewählter DOS. Goldenes Zeitalter der DOS-Entwicklung war in den 80er und 90er Jahren!

Verteilte Systeme

Entwurfskriterien und Eigenschaften

Namensgebung

Wie können wir ein Objekt benennen, das weit entfernt an einem unbekanntem Ort ist?

Robustheit

Was passiert, wenn eine Maschine oder ein Netzwerk ausfällt?

Sicherheit

Wie können wir unser System vor Versagen, Betrug, Eindringen, Diebstahl von Daten, schützen?

Performance

Langsamer als je zuvor?

Konsistenz

Ich machte eine Banktransaktion, die Bestätigung der Transaktion ging verloren, und die Transaktion wurde wiederholt. Mein Konto wurde zweimal belastet?

Skalierbarkeit

Was passiert mit diesen Kriterien, wenn wir die Anzahl der Maschinen um das Zehnfache erhöhen?

Parallele Systeme

Definition

  • 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)

Motivation für parallele Datenverarbeitung

  • Verkleinerung der Berechnungslatenz

Def. Latenz: Gesamte oder Teilbearbeitungszeit eines Datensatzes

  • Erhöhung des Datendurchsatzes

Def. Datendurchsatz: Anzahl der verarbeiteten Datensätze pro Zeiteinheit

Parallele Systeme

  • 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

figlatband


Abb. 3. Unterschied Latenz zu Bandbreite

Parallele Systeme

Man unterscheidet: Parallele Rechnerarchitektur und parallele Datenverarbeitung

Motivation für parallele Datenverarbeitung

  • Steigerung der Energieeffizienz von mikroelektronischen Systemen:

    • Komplexe generische Einprozessoranlagen besitzen ungünstige Energieeffizienz, aber:
    • Parallelisierung kann zu verbesserter Energieeffizienz des Gesamtsystems führen!
  • Skalierung von parallelen Rechnern auf reine Digitallogiksysteme für anwendungsspezifische Lösungen kann deutliche Reduktion der Hardware-Komplexität und der elektrischen Leistungsaufnahme bedeuten!

    • System-on-Chip Entwurf
    • Leistungsaufnahme eine CMOS Digitalschaltkreises (f: Frequenz, N: Schaltende Elemente, U: Spannung, C: Technologie):
(1)
\[  P(f,N,U,C) \sim fNU^{2}C
\]

Parallele Systeme

figparpowerperf[Qualcomm]


Abb. 4. Erhöhung der Performanz und der Energieffizienz durch Parallelisierung

Parallele Systeme

Anwendung paralleler Datenverarbeitung

  • 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)

Parallele Systeme

Beispiel Numerik und Digitale Bildverarbeitung

  • Welche Probleme und Nachteile gibt es?

figparsum[1,2]


Abb. 5. Parallele Berechnung der Summe von Bildpixeln mit Baumstruktur

Parallele Systeme

Ebenen der Datenverarbeitung in Abhängigkeit vom Parallelisierungsgrad

figparlevel

Parallele Systeme

Rechnerarchitekturen in der Datenverarbeitung

  • 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.

Parallele Systeme

Beispiel Sensorisches Material

figsensonet


Abb. 6. Beispiel eines verteilten und parallelen Systems: Sensornetzwerk (unten rechts) mit Maschen Topologie mit System-on-Chip Sensorknoten (oben rechts) mit massiv paralleler Datenverarbeitung. Sensorik: Dehnungsmessstreifen auf Gummiplatte (links)

Parallele Systeme

Parallelität und Nebenläufigkeit

  • Parallelität und Nebenläufigkeit ist ein zeitliches Ablaufmodell
  • Beschreibt eine zeitliche Überlappung oder Gleichzeitigkeit bei der Ausführung von parallelen Prozessen
  • Nebenläufigkeit kann ohne Synchronisation auskommen!

Konkurrenz

  • Concurrent übereinstimmend!
  • Konkurrenz beschreibt den Wettbewerb um geteilte Ressourcen!
  • Wettbewerb bedeutet Konflikt welcher aufgelöst werden muss!
  • Synchronisation zw. Prozessen!
  • Konsens Programmiermodell!

figconcpar[blog.golang.org]

Parallele Systeme

Parallele und verteilte Datenverarbeitungssysteme vereinen Nebenläufigkeit und Konkurrenz

  • Nebenläufigkeit durch Ausführungsplattform
  • Konkurrenz muss durch Programmierung gelöst werden

figconcpar2

Sequenzielle vs. parallele Datenverarbeitung

  • 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:

    1. Verteilungsphase der Eingabedaten
    2. Ausführungsphase mit Paralleler Verarbeitung
    3. Zusammenführungsphase der Ausgabedaten

Was könnte noch fehlen?

Sequenzielle vs. parallele Datenverarbeitung

figseqparpro


Abb. 7. Vergleich klassischer sequenzieller mit parallelen Datenverarbeitung

Zelluläre Automaten

  • 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):

\[\sigma_{i,j}(t + 1) = \Phi({\sigma_{k,l}(t) | \sigma_{k,l}(t) \in N })
\]

Zelluläre Automaten

Architektur und Grundprinzip

img-#figure-ca01


Abb. 8. Zellulärer Automat als Netzwerk aus einfachen kommunizierenden Berechnungseinheiten

Zelluläre Automaten

  • Nachbarschaftsrelationen sind auch bei Agenten wichtige Eigenschaft

img-#figure-ca02[Hoekstra,SCSCA,2010]


Abb. 9. Verschiedene Nachbarschaftsrelationen

Zelluläre Automaten

  • Die Nachbarschaftskonnektivität und die Anzahl der Zustände je Zelle bestimmen die Anzahl der möglichen lokalen Regeln die zu einem Zustandsübergang in der Nachbarschaftsgruppe führen wird sehr schnell sehr groß!!

img-#figure-ca03[Hoekstra,SCSCA,2010]


Abb. 10. Anzahl der Regeln eines ZA in Abhängigkeit der Anzahl der Zustände pro Zelle und des verbinsungsgrades der Zellen

Zelluläre Automaten

Parallele Datenverarbeitung

  • Betrachtet man den ZA als verteilten Rechner:

    • Alle Zellen führen ihren Zustandsübergang parallel durch, d.h., die Anwendung der Übergangsfunktion Φ(σ)
    • Daraus können sich unerwartete globale Zustände ergeben da der Zustand einer Zelle (i,j) von den Zuständen der Nachbarn abhängt, jedoch die Nachbarzellen ebenso von dem Zustand dieser Zelle abhängen
    • Ohne Synchronisation u.U. randomisierte Ergebnisse und Zustandsübergänge!!!
  • Betrachtet man den ZA als Simulator:

    • Die Zellen werden der Reihe nach (sequenziell) in einer bestimmter Ausbreitungsrichtung (z.B. von links unten nach rechts oben) der Reihe nach aktiviert!
  • 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)

Zelluläre Automaten

Zustände

  • 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)

\[\sigma_{i,j}(t + 1) = f(\sigma_{i,j}(t))
\]
  • Die Anzahl möglicher Regeln (also möglicher Zustandsübergänge) ist dann abhängig von der Anzahl der Zustände |σ| und Nachbarn n:
\[N_r= |\sigma|^{|\sigma|^n}
\]

Zelluläre Automaten

Beispiel: Bildverarbeitung auf ZA

  • Die einzelnen Pixel des Bilds (Sensoren) sind den Zellenrechnern zugeordnet
  • Typische Operationen: Rauschunterdückung, Kantenfilter, Histogrammberechnung usw.
  • Eine Zelle verändert immer nur seinen eigenen Datenwert durch Anwendung einfacher Regeln der Menge Φ mit Nachbarzellendaten

Zelluläre Automaten

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)

img-#figure-cai01


Abb. 11. Alle 51 möglichen Muster (Regeln) damit ein Pixel seinen Wert (binär, SW Bild) invertiert (Mooresche Nachbarschaft mit 8 Nachbarn); gezeigt sind nur zentrale schwarze Pixel, durch Invertierung weitere 51 Regeln für weiße Pixel[Rosin,2002]

Zelluläre Automaten

Rauschunterdrückung

img-#figure-cai02


Abb. 12. Rauschunterdückung durch einen binären ZA: (a) Originalbild (b) Verrauschtes Bild (c) Entrauschtes Bild mit dem unten gezeigten Regelsatz [Rosin,2002]

Zelluläre Automaten

Kantendetektion

img-#figure-cai03


Abb. 13. Kantendetektion (oben,links) Originalbild (oben,rechts) Konv. Alg. (unten, links) CA - ein Zyklus ZA (unten rechts) zwei Zyklen CA [Rosin,2002]

Zelluläre Automaten

Die Programmierung

  • Um einen ZA zu programmieren muss dessen Größe (Netzwerk Zeilen und Spalten), die Nachbarschaftsverbindungen (Reichweite und Richtung) sowie die Zustandsübergangsfunktione einer Zelle beschrieben werden
    • Annahme: Uniformer ZA, d.h. gleiches Φ gilt für alle Zellen!
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
  }  
}