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

zweites Bildschirm auf gleichem PC einrichten
H A, 30.09.2016 19:16, 0 Antworten
Hallo, ich habe Probleme mein zweites Bildschirm einzurichten.(Auf Debian Jessie mit Gnome) Ich...
Probleme mit MPC/MPD
Matthias Göhlen, 27.09.2016 13:39, 2 Antworten
Habe gerade mein erstes Raspi Projekt angefangen, typisches Einsteigerding: Vom Raspi 3B zum Radi...
Soundkarte wird erkannt, aber kein Ton
H A, 25.09.2016 01:37, 6 Antworten
Hallo, Ich weiß, dass es zu diesem Thema sehr oft Fragen gestellt wurden. Aber da ich ein Linu...
Scannen nur schwarz-weiß möglich
Werner Hahn, 20.09.2016 13:21, 2 Antworten
Canon Pixma MG5450S, Dell Latitude E6510, Betriebssyteme Ubuntu 16.04 und Windows 7. Der Canon-D...
Meteorit NB-7 startet nicht
Thomas Helbig, 13.09.2016 02:03, 4 Antworten
Verehrte Community Ich habe vor Kurzem einen Netbook-Oldie geschenkt bekommen. Beim Start ersch...