Parallel LUA / CSP (Stefan Bosse) [7.2020] |
# lvm myprog.lua
# lvm weblvm.lua
Service thread 2 started.
[2@1592562880] HTTP server (2) listening to http://0.0.0.0:4610
Monitor thread 4 started.
[4@1592562880] HTTP server (4) listening to http://0.0.0.0:4611
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!
In der folgenden Aufgabe soll die Parallelisierung einer Berechnung inklusive Synchronisation implementiert werden.
Synchronisation ist erforderlich bei:
Die Performanz des parallelen Programms soll mit der rein sequenziellen (einprozess) Ausführung verglichen werden
Dazu wird die Rechenzeit eines jeden Task mit der luv.milli Funktion gemessen:
▸
◼
|
✗
↻
|
▸
◼
|
✗
↻
|
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?
Datencontainer in Form von Matrizen können durch verschiedene Prozesse geteilt werden (Shared Memory)
Es können ein-, zwei- und dreidimensionale "Matrizen" erzeugt werden
Es stehen drei Datentypen zur Verfügung: int, float, double
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
▸
◼
|
✗
↻
|
▸
|
✗
|
▸
|
✗
|
▸
◼
|
✗
↻
|
▸
|
✗
|
▸
|
✗
|
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?
▸
◼
|
✗
↻
|
▸
|
✗
|
▸
|
✗
|
▸
|
✗
|
▸
|
✗
|
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?
▸
◼
|
✗
↻
|
▸
|
✗
|
▸
|
✗
|