Parallel LUA / CSP (Stefan Bosse) [7.2020]

Parallel Lua / Csp Tutorial (Teil 2)

Vorbereitung

Leider kann unter seltenen Bedingungen (Race conditions!) lvm fehlerhaft arbeiten und "abstürzen" → Auch ich als Autor von lvm habe mit den Tücken von parallelen und konkurrierenden Softwaresystemen zu kämpfen!

Parallele Datenverarbeitung

In der folgenden Aufgabe soll die Parallelisierung einer Berechnung inklusive Synchronisation implementiert werden.

Synchronisation ist erforderlich bei:

  1. Der Verteilung der Eingabedaten
  2. Der Berechnung
  3. Der Zusammenführung der Ausgabedaten

Zeitmessung

Zeitmessung (1)

 ▸ 
 ◼ 
 ✗ 
 ↻ 

Zeitmessung (2)

 ▸ 
 ◼ 
 ✗ 
 ↻ 

Metriken

Beschleunigung

\[ S(N) = \frac{t_{comp}(1)}{t_{comp}(N)} \]

Effizienz

\[ E(N) = \frac{S(N)}{N} \]
Aufgabe.

Frage. Berechne die Beschleunigung und Effizienz für obiges Beispiel

Frage. Füge bei den sequenziellen und parallelen Prozesskonstruktor zwei weitere Prozesse hinzu. Wie verhält sich S und E?

Frage. Betrachte die Rechnerarchitektur von modernen Computern (Mehrkernprozessor, Speicherhierarchie). Wo könnten die Gründe für das (schlechte?) Abschneiden des 4-Prozess Systems liegen?


Geteilte Daten

Matrix:new(dims,init?,datatype?) -> 'datatype matrix
Matrix.int(dims,init?) -> int matrix
Matrix.float(dims,init?) -> float matrix
Matrix.double(dims,init?) -> double matrix
matrix:print() -> string
matrix:setall(v)
matrix:read(i,j?,k?) -> 'a
matrix:write(val,i,j?,k?)
Benutzung von geteilten Matrizen

 ▸ 
 ◼ 
 ✗ 
 ↻ 

Bildverarbeitung

Load and Show Test Image

 ▸ 

 ✗ 

Speicherung der Eingabedaten


 ▸ 
 ✗ 

Verarbeitung in Lua

Bilddaten in Lua verarbeiten

 ▸ 
 ◼ 
 ✗ 
 ↻ 

Laden von Ergebnissen


 ▸ 
 ✗ 

Show Output Image

 ▸ 

 ✗ 

Parallelisierung

Bildinvertierung

Aufgabe.

Nehme das vorherige Template für das Einlesen und Ausgeben der Bilddaten (Die Datei input.json muss bereits existieren). Siehe unten. Immer das Ergebnisbild einlesen und testen (ansehen)!

Frage. Implementiere den seq. Prozess für die Bildinvertierung als parallelen Prozess mit Verteilungs- und Kollektionssynchronisation (Semaphore oder Barriere) für N=2,3,4. Welche Beschleunigung und Effizienz ergibt sich? Die Eingabedaten sollen dabei segmentiert und in den verschiedenen Prozessen partioniert werden.

Frage. Ändert sich etwas an S und E wenn man statt spaltenweise die Matrizen zeilenweise durchläuft? Wenn ja, woran könnte es liegen?


Parallele Bilddatenverarbeitung (Invertierung)

 ▸ 
 ◼ 
 ✗ 
 ↻ 

Laden von Ergebnissen


 ▸ 
 ✗ 

Show Output Image

 ▸ 

 ✗ 

Bildglättung

Erzeugung eines verrauschten Bildes

Create and Show Noisy Image

 ▸ 

 ✗ 

Speicherung der Eingabedaten


 ▸ 
 ✗ 

Aufgabe.

Nehme das vorherige Template für das Einlesen und Ausgeben der Bilddaten (Die Datei inputNoise.json muss bereits existieren). Siehe unten. Immer das Ergebnisbild einlesen und testen (ansehen)! Es wird die Bildglättung aus Tutorial5 verwendet (naiver Algorithmus, Moore Nachbarschaft).

Frage. Implementiere den seq. Prozess für die Bildglättung als parallelen Prozess mit Verteilungs- und Kollektionssynchronisation (Semaphore oder Barriere) für N=2,3,4. Welche Beschleunigung und Effizienz ergibt sich? Die Eingabedaten sollen dabei segmentiert und in den verschiedenen Prozessen partioniert werden.

Frage. Ändert sich etwas an S und E wenn man statt spaltenweise die Matrizen zeilenweise durchläuft? Wenn ja, woran könnte es liegen?


Parallele Bilddatenverarbeitung (Invertierung)

 ▸ 
 ◼ 
 ✗ 
 ↻ 

Laden von Ergebnissen


 ▸ 
 ✗ 

Show Output Image

 ▸ 

 ✗ 


Created by the NoteBook Compiler Ver. 1.3.9 (c) Dr. Stefan Bosse (Fri Jul 31 2020 09:29:49 GMT+0200 (CET))