========== Benchmarks ========== Ziele: - Erzeugen einfacher Benchmarks, um die Laufzeit verschiedener numerischer Verfahren zu vergleichen. - Mit Macros sollen Paramter für das Problem beim Compilieren festgelgt werden können. Damit können mit einem cleveren Makefile verschiedene Konfigurationen getestet werden. - Beim Bechmark wird nicht nur die Laufzeit vergleichen, sondern auch getestet, ob alle Varianten (numerisch) das gleiche Ergebnis produzieren. - Die Ausgabe ist eine Tabelle, die in eine Datei für das Post-Processing umgelenkt werden kann. - Mit Programmen wie GNUPlot kann das Ergebnis visualisiert werden. Beispiel aus der Vorlesung ========================== Wie in der Vorlesung gezeigt, wird in folgendem Programm die *Walltime* verglichen, die benötigt wird, um Matrizen die zeilen- oder spaltenweise im Speicher liegen zu initalisieren. Weitere Details: - Für jede Variante wird das Ergebnis nach der Durchführung in einen eigenen Puffer (`buffer1` und `buffer2` kopiert). Bei der Berechnung arbeitet jede Variante aber auf *demselben* Puffer `buffer`. - Mit `asumDiff` wird verglichen, ob die Puffer (numerisch) das gleiche Ergebnis beinhalten. :import:session3/bench_initmatrix.c Übersetzen und Ausführen ------------------------ Hier wurde der Paramter `MIN_T` beim Übersetzen auf 0 gesetzt, um das Erzeugen dieser Seite zu bescgleunigen. ---- SHELL (path=session3) ---------------------------------------------- gcc -Wall -DMIN_T=0 -o bench_initmatrix bench_initmatrix.c ./bench_initmatrix ------------------------------------------------------------------------- Benchmark durchführen ===================== Wir zeigen zunächst an einem Beispiel, wie man generell Plots für Benchmarks macht. Darauf aufbauend sollt ihr eigene Plots zu anderen Charakteristiken (Speedup) und Darstellungsformen (Log-Skalierung) erstellen. Die Aufgabenstellung folgt am Ende des Abschnittes. Ausgabe in Datei lenken ----------------------- Da die Ausgabe mit `printf` alles nach `stdout` schreibt, können wir diese einfach in eine Datei umlenken: ---- SHELL (path=session3) ---------------------------------------------- ./bench_initmatrix > report.initmatrix ------------------------------------------------------------------------- GNUPlot Skript schreiben ------------------------ Man kann GNUPlot auch interaktiv bedienen (zeigen wir). Aber genau so wichtig ist es, dass man dafür Skripte schreiben kann, um aus Text-Tabellen Plots erzeugen zu können. Mit folgendem GNUPlot-Skript werden Plots erstellt, die zeigen wie die Laufzeit vom Speicherformat abhängt: ---- CODE (file=session3/plot.initmatrix) ------------------------------- set terminal svg size 900, 500 set output "bench.initmatrix.svg" set xlabel "Matrix dim A: M=N" set title "Matrix-Initialisierung" set key outside set pointsize 0.5 plot "report.initmatrix" using 1:3 with linespoints lt 2 lw 3 title "Col-Major", \ "report.initmatrix" using 1:4 with linespoints lt 3 lw 3 title "Row-Major" ------------------------------------------------------------------------- Plots erstellen --------------- ---- SHELL (path=session3) ---------------------------------------------- gnuplot plot.initmatrix ------------------------------------------------------------------------- ---- IMAGE ------------------ session3/bench.initmatrix.svg ----------------------------- Aufgabe ------- - Y-Achse beschriften - Fontsize für Titel und Achsenbeschriftung ändern - Logarithmische Darstellung für X- und Y-Achse. Wann und wieso ist das sinnvoll? - Neuer Plot für Speedup. Welche Skalierung ist sinnvoll? :navigate: up -> doc:index next -> doc:session3/page02