Fixed numbering
This commit is contained in:
+4
-4
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
Ziel ist ein C-Programm, das einen Ausschnitt des Tricorn-Fraktals berechnet und als BMP-Datei speichert. Über Kommandozeilenargumente werden Startpunkt, Bildgröße, Auflösung, maximale Iterationszahl, Ausgabedatei, Farbmodus und Implementierungsvariante festgelegt. Neben der skalaren Vergleichsversion enthält das Projekt SIMD- und Thread-Varianten, deren Laufzeiten miteinander verglichen werden.
|
Ziel ist ein C-Programm, das einen Ausschnitt des Tricorn-Fraktals berechnet und als BMP-Datei speichert. Über Kommandozeilenargumente werden Startpunkt, Bildgröße, Auflösung, maximale Iterationszahl, Ausgabedatei, Farbmodus und Implementierungsvariante festgelegt. Neben der skalaren Vergleichsversion enthält das Projekt SIMD- und Thread-Varianten, deren Laufzeiten miteinander verglichen werden.
|
||||||
|
|
||||||
## 4. Implementierungen
|
## 2. Implementierungen
|
||||||
|
|
||||||
**V1** ist die skalare Vergleichsimplementierung. Real- und Imaginärteil werden direkt mit `float`-Operationen berechnet. Das Bild wird zeilenweise durchlaufen und die Koordinaten werden inkrementell erhöht.
|
**V1** ist die skalare Vergleichsimplementierung. Real- und Imaginärteil werden direkt mit `float`-Operationen berechnet. Das Bild wird zeilenweise durchlaufen und die Koordinaten werden inkrementell erhöht.
|
||||||
|
|
||||||
@@ -14,7 +14,7 @@ Ziel ist ein C-Programm, das einen Ausschnitt des Tricorn-Fraktals berechnet und
|
|||||||
|
|
||||||
**V3** erweitert die optimierte SIMD-Berechnung um POSIX-Threads. Die verfügbaren logischen Prozessoren werden mit `sysconf` beziehungsweise `GetSystemInfo` bestimmt. Jeder Thread erhält einen zusammenhängenden Zeilenbereich und schreibt ausschließlich in diesen Teil des gemeinsamen Bildpuffers. Bei kleinen Bildern wird die Threadzahl reduziert, sodass ungefähr mindestens zehn Zeilen pro Thread verbleiben.
|
**V3** erweitert die optimierte SIMD-Berechnung um POSIX-Threads. Die verfügbaren logischen Prozessoren werden mit `sysconf` beziehungsweise `GetSystemInfo` bestimmt. Jeder Thread erhält einen zusammenhängenden Zeilenbereich und schreibt ausschließlich in diesen Teil des gemeinsamen Bildpuffers. Bei kleinen Bildern wird die Threadzahl reduziert, sodass ungefähr mindestens zehn Zeilen pro Thread verbleiben.
|
||||||
|
|
||||||
## 5. Tests und Performanzanalyse
|
## 3. Tests und Performanzanalyse
|
||||||
|
|
||||||
Die Laufzeit wird mit `clock_gettime(CLOCK_MONOTONIC)` gemessen. Im Benchmark-Modus wird die gewählte Berechnung mehrfach ausgeführt; die BMP-Ausgabe liegt außerhalb der Messung. Der Mittelwert ist Gesamtzeit geteilt durch Wiederholungszahl. Der Speedup gegenüber einer Referenz \(R\) lautet
|
Die Laufzeit wird mit `clock_gettime(CLOCK_MONOTONIC)` gemessen. Im Benchmark-Modus wird die gewählte Berechnung mehrfach ausgeführt; die BMP-Ausgabe liegt außerhalb der Messung. Der Mittelwert ist Gesamtzeit geteilt durch Wiederholungszahl. Der Speedup gegenüber einer Referenz \(R\) lautet
|
||||||
|
|
||||||
@@ -75,7 +75,7 @@ Alle Benchmarking-Tests werden 100 mal ausgeführt um eine genaue Messung zu erh
|
|||||||
| V2 | 1.573 | 3.55 |
|
| V2 | 1.573 | 3.55 |
|
||||||
| V3 | 0.022 | 250.64 |
|
| V3 | 0.022 | 250.64 |
|
||||||
|
|
||||||
## 6. Korrektheit und Fazit
|
## 4. Korrektheit und Fazit
|
||||||
|
|
||||||
Zur Korrektheitsprüfung wurden V0, V1, V2 und V3 mit identischen Parametern ausgeführt. Die erzeugten Graustufenbilder wurden mit ImageMagick und der Metrik `AE` pixelweise verglichen. Von insgesamt 523776 Pixeln unterschieden sich V0 und V1 an 5864 Pixeln (1,120 %), V2 und V1 an 5523 Pixeln (1,054 %) sowie V3 und V1 an 5993 Pixeln (1,144 %).
|
Zur Korrektheitsprüfung wurden V0, V1, V2 und V3 mit identischen Parametern ausgeführt. Die erzeugten Graustufenbilder wurden mit ImageMagick und der Metrik `AE` pixelweise verglichen. Von insgesamt 523776 Pixeln unterschieden sich V0 und V1 an 5864 Pixeln (1,120 %), V2 und V1 an 5523 Pixeln (1,054 %) sowie V3 und V1 an 5993 Pixeln (1,144 %).
|
||||||
|
|
||||||
@@ -87,7 +87,7 @@ Die Messungen zeigen, dass SIMD die skalare Berechnung deutlich beschleunigt. V3
|
|||||||
|
|
||||||
Insgesamt zeigt das Projekt die schrittweise Optimierung von einer skalaren Implementierung über SIMD bis zur Kombination aus SIMD und Multithreading. Grenzen bleiben Rundungsabweichungen, unterschiedlich lange aktive SIMD-Lanes, der Aufwand der Thread-Verwaltung und die Geschwindigkeit von RAM-Zugriffe.
|
Insgesamt zeigt das Projekt die schrittweise Optimierung von einer skalaren Implementierung über SIMD bis zur Kombination aus SIMD und Multithreading. Grenzen bleiben Rundungsabweichungen, unterschiedlich lange aktive SIMD-Lanes, der Aufwand der Thread-Verwaltung und die Geschwindigkeit von RAM-Zugriffe.
|
||||||
|
|
||||||
## 7. Individuelle Beiträge
|
## 5. Individuelle Beiträge
|
||||||
|
|
||||||
**Yashar Alan Zenker:**
|
**Yashar Alan Zenker:**
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user