Als man Takte noch zählen konnte

Früher war Programmieren etwas für harte Kerle!

Vor einiger Zeit sind mir beim Ausmisten ein paar Andenken an lang vergangene Pioniertage des Computerzeitalters in die Hände gefallen: Ausgedruckte Programmlistings von Assembler-Quelltexten mit 68000er-Befehlen für den Atari ST. Noch so richtig von Hand codiert, ohne tolle Entwicklungsumgebung, ohne unnötigen Schnickschnack wie Autovervollständigung, Debugger oder Online-Hilfe. Ach ja, das waren noch Zeiten…

Warum eigentlich? Natürlich war früher nicht alles besser, das weiß man spätestens seit Jochen Malmsheimer seinem Wurstbrot hinterhergetrauert hat (unbedingt online ansehen). Aber trotzdem gab es für mich früher häufiger Momente, in denen man das Gefühl hatte, so richtig etwas geleistet zu haben. Nicht unbedingt, weil die eigene Leistung so besonders groß oder weltbewegend war, sondern vielmehr, weil sie in nackte Zahlen zu packen war!

In Zeiten, in denen Computer gemessen an heutigen Verhältnissen geradezu erbärmlich langsam waren (ein Prozessorkern mit 8 MHz, da sind heutige Systeme um bis zu Faktor 2.000 schneller) und lächerlich wenig Speicherplatz hatten (maximal 4 MB RAM – der Rechner, auf dem ich diesen Text gerade schreiben, hat 4.000-mal so viel Speicher), lag die Herausforderung vor allem darin, dass das Ergebnis mit wenig Platz und noch weniger Rechenleistung auskam.

Die letzte Version unseres Grafikprogramms für den Atari ST, welches immerhin aus zwei Teilen (Bildbearbeitung und Vektorgrafik) bestand, war letztlich nur 600 KB groß und setzte in Sachen Geschwindigkeit in vielen Punkten Maßstäbe. Das war nur zu schaffen, indem ein Großteil des Programms von Hand in Maschinencode geschrieben und gnadenlos optimiert wurde.

Das wichtigste Hilfsmittel war eine sogenannte Takttabelle, die für jeden einzelnen Prozessor-Befehl und alle möglichen Rahmenbedingungen die jeweilige Anzahl an Prozessortakten auflistete, die dieser Befehl für die Ausführung benötigte. Somit konnte für jedes Codesegment exakt ermittelt werden, wie lange dessen Ausführung dauern würde, ohne es zu implementieren und ausprobieren zu müssen. Für jede Funktion wurden viele verschiedene Umsetzungen erdacht und durchgerechnet. Von den rechnerisch schnellsten Lösungen wurde dann in der Regel die kleinste verwendet, um gleichzeitig auch Platz zu sparen.

Bei einigen besonders zeitkritischen Funktionen wurde sogar selbstmodifizierender Code verwendet, d.h. Teile im Inneren einer Schleife wurde ja nach Rahmenbedingung vor der Ausführung durch andere Befehle ersetzt, um weder den ganzen Code mehrfach vorhalten zu müssen noch im inneren einer Schleife immer wieder die gleiche (zeitraubende) Abfrage durchlaufen zu müssen.

Diese extrem effiziente Methode ist mit heutigen Prozessoren leider nicht mehr möglich, da diese viel weniger linear auf die Befehle zugreifen und Schreibzugriffe auf Programmcode aus Sicherheitsgründen komplett verhindern. Trotzdem reizt es mich noch immer, ein Stückchen Code oder ein ganzes Anwendungsgebiet unseres Programms hemmungslos zu optimieren.

Vor einigen Jahren gab es eine solche, mehrwöchige Optimierungsphase, die dazu führte, dass das Öffnen und Speichern von Dateien um Faktor 2-3 beschleunigt wurde, der Bildaufbau sogar um bis zu Faktor 8. Natürlich ohne dass dafür neue Hardware erforderlich wäre, einfach nur die neuere Programmversion!

Solche extremen Beschleunigungen sind nicht durch eine einzelne Änderung möglich, sondern durch eine Vielzahl an Optimierungen an ganz unterschiedlichen Stellen im Programm, die optimal auf einander abgestimmt werden müssen. Eine Menge Arbeit, die sich aber vor allem für die Anwender auszahlt. Viel mehr, als irgendwelche esoterischen neuen Funktionen, die niemand wirklich benötigt.

Ich wünschte mir, die großen Standardsoftware-Hersteller würden sich mehr auf die Optimierung konzentrieren, als ständig neue unnötige Spezialfunktionen anzubieten. Wenn der Start eines Textprogramms 10 Sekunden und der Start des E-Mail-Programms sogar 30 Sekunden und länger benötigt, dann ist das einfach nur nervig!

Ich freue mich schon darauf, mich mal wieder so richtig in den Code hineinzufressen und das letzte Quäntchen an Geschwindigkeit herauszuquetschen. Denn das macht einfach Spaß!

[EOF]

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden /  Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden /  Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden /  Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden /  Ändern )

Verbinde mit %s