It's the hardware, stupid!

Linuxtag 2009: Programmierer sollen sich mit Hardware beschäftigen

Linuxtag 2009: Programmierer sollen sich mit Hardware beschäftigen

Mathias Huber
26.06.2009 Ulrich Drepper, Maintainer der Glibc, brach in seiner Keynote auf dem Linuxtag eine Lanze für hardwarenahes Programmieren.

Jeder Programmierer solle sich mit Parallelisierung und den Details moderner Prozessoren beschäftigen, sagte der Red-Hat-Mitarbeiter. Die CPU-Hersteller vermittelten den Eindruck, die Prozessoren würden stets dramatisch schneller, begann Drepper seinen englischsprachigen Vortrag mit dem Titel "Of programmers and hardware: transcending the gap".

Doch die meisten Programme liefen lediglich auf einem Prozessorkern, nicht alle Probleme seien gut parallelisierbar. Betrachte man den einzelnen Prozessorkern, sei kaum noch wachsende Performance erkennbar. Bei der Entwicklung von Chips mit zahlreichen Kernen könnte der einzelne Kern sogar schwächer werden, erläuterte Drepper.

Wer von modernen Prozessoren profitieren wolle, müsse sich daher mit deren Topologie beschäftigen: Mancher vermeintliche Achtkern-Prozessor bestehe tatsächlich aus zwei Vierkern-CPUs, die keinen gemeinsamen Cache besitzen, wie der Referent an Diagrammen veranschaulichte. Programme sollten auf allen Topologien funktionieren, aber gleichzeitig die vorhandenen Stärken einer Systemarchitektur nutzen.

Eine weitere Herausforderung sei die Non Uniform Memory Architecture (NUMA), die auf modernen Multi-Socket-Systemen zum Einsatz kommt. Hier hat jede CPU besonders schnellen Zugriff auf eine bestimmte Portion RAM, aber eher langsamen auf den Rest. Den gesamten Arbeitsspeicherschicht als uniforme Einheit zu behandeln führe hier zu schlechter und vor allem unvorhersehbarer Performance, die jegliche vernünftige Optimierung unmöglich mache.

Informationen über die System-Topologie stellt beispielsweise der Linux-Kernel im "/sys"-Dateisystem zur Verfügung. Geschickte Entwickler wüssten diese zu nutzen. Daneben gibt es Dreppers Bibliothek LibNUMA, die solche Funktionen bereitstellt. Der Sprecher verwies dazu auf seinen Aufsatz "What Every Programmer Should Know About Memory" (PDF)

Noch aus Cray-Zeiten, berichtete Drepper, kenne er SIMD: Single-Instruction/Multiple Data, das nun auf den meisten Prozessoren verfügbar ist. Vergleichs-, Logik und Vektor-Operationen lassen sich mit der derzeitigen SSE-Technologie bis zu viermal so schnell verarbeiten, mit dem kommenden AVX bis zu achtmal. Drepper zeigte als Codebeispiel einen For-Loop, dessen Interna er mit "Cmp"- und "Blend"-Instruktionen geeignet umbaute.

Nur mit Kenntnissen über die System-Architektur und die Anforderungen seiner Anwendung könne ein Programmierer die richtigen Entscheidungen für die Speicherbehandlung und - auf Mehrprozessor-Systemen - die Core-Affinität treffen. Das müsse er aber auch tun, denn das Betriebssystem selbst verwende nur geeignete Standardwerte und schalte gegebenenfalls einen nicht benötigten Prozessor aus, um Energie zu sparen.

Für dieses Hardware-bewusste Programmieren eigneten sich allerdings nicht alle Programmiersprachen gleichermaßen, schloss Ulrich Drepper seinen Vortrag, "auch, wenn ich mir mit solchen Aussagen nicht unbedingt Freunde mache". Perl und Python böten wenig Kontrolle, C und C++ sowie Fortran viel Kontrolle, während Java in der Mitte liege.

Dreppers Tipp für Programmieranfänger: Skriptsprachen taugten für den Einstieg, man dürfe aber weder Performance noch Energieeffizienz erwarten. Später müsse sich der Entwickler aber mit den Details der Hardware auseinandersetzen. Performance-kritische Programmteile ließen sich in C oder C++ neu implementieren. Bei der Parallelisierung helfe beispielsweise OpenMP. Zum Schluss heiße es, immer weiter zu optimieren, bis das gesteckte Ziel erreicht sei. Das alles sei nicht nur für Cracks, sondern für jeden Programmierer machbar.

Ähnliche Artikel

Kommentare

Aktuelle Fragen

Nach Ubdates alles weg ...
Maria Hänel, 15.11.2014 17:23, 4 Antworten
Ich brauche dringen eure Hilfe . Ich habe am wochenende ein paar Ubdates durch mein Notebook von...
Brother Drucker MFC-7420
helmut berger, 11.11.2014 12:40, 1 Antworten
Hallo, ich habe einen Drucker, brother MFC-7420. Bin erst seit einigen Tagen ubuntu 14.04-Nutzer...
Treiber für Drucker brother MFC-7420
helmut berger, 10.11.2014 16:05, 2 Antworten
Hallo, ich habe einen Drucker, brother MFC-7420. Bin erst seit einigen Tagen ubuntu12.14-Nutzer u...
Can't find X includes.
Roland Welcker, 05.11.2014 14:39, 1 Antworten
Diese Meldung erhalte ich beim Versuch, kdar zu installieren. OpenSuse 12.3. Gruß an alle Linuxf...
DVDs über einen geeigneten DLNA-Server schauen
GoaSkin , 03.11.2014 17:19, 0 Antworten
Mein DVD-Player wird fast nie genutzt. Darum möchte ich ihn eigentlich gerne abbauen. Dennoch wür...