Effiziente Programme 2017W TU-Wien: Vektor Library

Aufgabenstellung

Kurzfassung:

Es ist eine kleine "Programmbibliothek" gegeben welche sehr einfache Vektor Operationen implementiert und Werte-Semantik verwendet.
Diese wird von einem Testprogramm verwendet, beim Optimieren ist nur die Veränderung der Bibliothek zulässig.

Die gesamte original Aufgabenstellung ist hier zu finden.

Überblick

Unsere Gruppe führte folgende Optimierungen durch:

Besonders Interessant dabei ist, das unsere ersten Optimierungsansätze (Assembly, Datenumstrukturierung) sehr schlecht verlaufen sind. Erst nachdem wir das Programm durch eine andere Implementierung zuerst sehr stark verschlechtert hatten konnten wir darauf basierend andere Optimierungen anwenden die dann tatsächlich zu einer Verbesserung führte.

Ergebnisse

Verbesserung Cycles Absolut Cycles Relativ Instructions Absolut Instructions Relativ
Original 1.790.767.358 100% 4.571.583.802 100%
+ Lazy Evaluation 6.918.121.173 386,3% 14.822.838.134 324,2%
+ Mathematische Zusammenfassung 3.501.391.479 195,5% 7.975.040.428 174,4%
+ Memory Management 868.780.341 48,5% 1.613.760.109 35,3%
+ Compiler 767.622.685 42,9% 1.413.462.136 30,9%

Im Endeffekt konnten wir auf der Testmachine die Laufzeit von 2,41s auf 0,54s verringern, also einen Speedup von etwa 2,25 erzielen.

Unsere Implementierung (in vectors.c): Directory
Unsere Präsentation: PDF