Schon lange war es mal an der Zeit, diesen Post zu überarbeiten. Er handelt von Gedanken zu länger zurückliegenden Projekten. Wer sich für Neueres interessiert, findet im Bereich Computation noch mehr.
Klar – vor über zwanzig Jahren war ich mit wissenschaftlichem Rechnen beschäftigt. Es war eine schöne und spannende Zeit. Aber ehrlich: muss man heute noch über solche Projekte reden? Sind sie mehr als Nostalgie?
Wenn Rechenkapazität und Speichermenge begrenzt sind, dann entsteht ganz von selbst der Bedarf nach Effizienz bei ihrem Einsatz. Nicht zuletzt dieser Mangel war der Grund für die Blüte der Informatik in der zweiten Hälfte des 20. Jahrhunderts. Gegen Ende gab es bereits leistungsfähige Rechner, bei deren Einsatz für Standardaufgaben man sich keine besonderen Gedanken machen musste.
Anders sah es bei wirklich großen Aufgaben aus. Quasi unbegrenzte Cloud-Ressourcen waren noch nicht vorhanden, es war die Zeit der immer größer werdenden “Supercomputer”.
Diese vernetzten auf geschickte Weise große Mengen an Prozessoren und Arbeitsspeicher, oft mit spezialisierten Architekturen für bestimmte Problemstellungen. In unserem Institut begann mann, dafür zunächst die lokalen Workstations zu verteilten Clustern zusammenzufügen. Parallelisierbare Algorithmen wurden entwickelt, die es ermöglichten, die vorhandenen Kapazitäten Tag und Nacht auszunutzen – für die Lösung großer Optimierungsprobleme, physikalische Fragestellungen zur selbstorganisierten Strukturbildung oder für statistische Grundlagenprobleme.
Höhepunkt war die Errichtung und Nutzung eines Beowulf-Clusters, welcher die zur Verfügung stehenden Rechenkapazitäten noch einmal beträchtlich erhöhte. Dieser war für die damalige Zeit beachtlich leistungsfähig und zudem außerordentlich kostengünstig, da er komplett aus Standard-PC-Technik bestand.
Heute gibt es immer noch große Spezialmaschinen, sehr viel größer als unser seliger Cluster. Üblicherweise nutzt man aber eher die bekannten Cloudarchitekturen bei Amazon, Google oder Microsoft, die praktisch grenzenlose Skalierbarkeit erlauben.
Das Verständnis für Effizienz ist dabei hier und da auf der Strecke geblieben. Ein Data Scientist, der nach einem größeren Rechner schreit, aber nicht bemerkt, dass er nur einen von acht Rechenkernen überhaupt benutzt, und der keine Ahnung hat, mit wie viel Arbeitsspeicher er eigentlich ausgerüstet ist, ist mir in den letzten Jahren nicht nur einmal begegnet.
Ganz ehrlich – ich bin froh, dass ich in einer Zeit Programmieren gelernt habe, als Effizienz noch wichtig war. Sie zwingt zu einem guten Stil, Sparsamkeit und gezieltem, schrittweisen Vorgehen bei der Entwicklung von Anwendungen. Und sie zwingt dazu, nachzudenken, bevor man anfängt. Und schreibt man für andere Anwender als sich selbst, dann müssen auch diese auf diesem Weg mitgenommen werden. Heute kennt man für so etwas Begriffe wie agiles Vorgehen und viele mehr, und es ist Teil der Ausbildung von Softwareentwicklern. Und es macht Freude, mit Leute zu Arbeiten, die verstanden haben, dass sie damit eine Kunst betreiben.