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

Start-Job behindert Bootvorgang, Suse 13.2, KDE,
Wimpy *, 20.02.2015 10:32, 4 Antworten
Beim Bootvorgang ist ein Timeout von 1 Min 30 Sec. weil eine Partition sdb1 gesucht und nicht gef...
Konfiguration RAID 1 mit 2 SSDs: Performance?
Markus Mertens, 16.02.2015 10:02, 4 Antworten
Hallo! Ich möchte bei einer Workstation (2x Xeon E5-2687Wv3, 256GB RAM) 2 SATA-SSDs (512GB) al...
Treiber für Canon Laserbase MF5650
Sven Bremer, 10.02.2015 09:46, 1 Antworten
Hallo ich weiß mittlerweile das Canon nicht der beste Drucker für ein Linux System ist. Trotzd...
Linux und W7 im Netz finden sich nicht
Oliver Zoffi, 06.02.2015 11:47, 3 Antworten
Hallo! Ich verwende 2 PCs, 1x mit W7prof 64 Bit und einmal mit Linux Mint 17 64 Bit, welches ich...
Rootpasswort
Jutta Naumann, 29.01.2015 09:14, 1 Antworten
Ich habe OpenSuse 13.2 installiert und leider nur das Systempasswort eingerichtet. Um Änderungen,...