Linuxtag 2009: Programmierer sollen sich mit Hardware beschäftigen

Linuxtag 2009: Programmierer sollen sich mit Hardware beschäftigen

It's the hardware, stupid!

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

Develop Drucker
Jürgen Kos, 27.02.2017 18:15, 0 Antworten
Hallo Comunity. Ich habe nen älteren Developdrucker D3550iD und wollte ihn ins Netzwerk einbin...
Probleme mit der Maus
Thomas Roch, 21.02.2017 13:43, 1 Antworten
Nach 20 Jahren Windows habe ich mich zu Linux Ubuntu probeweise durchgerungen!!! Installation - k...
KWin stürzt ab seit Suse Leap 42.2
Wimpy *, 21.02.2017 09:47, 4 Antworten
OpenSuse 42.2 KDE 5.8.3 Framework 5.26.0 QT 5.6.1 Kernel 4.4.46-11-default 64-bit Open-GL 2....
Shell-Befehl zur Installation von Scanner-Treiber
Achim Zerrer, 15.02.2017 12:13, 10 Antworten
Hallo, ich habe Einen Brother Drucker mit Scanner. Nachdem ich mit Hilfe der Community den Druck...
kiwix öffnet ZIM Datei nicht
Adrian Meyer, 13.02.2017 18:23, 1 Antworten
Hi, ich nutze Zim Desktop für mein privates Wiki. Fürs Handy habe ich mir kiwix heruntergelade...