Natürlich ist es keine Überraschung wenn ich sage, dass Prozessoren seit einer Weile nicht mehr schneller und schneller werden (aus Sicht der Taktrate), sondern stattdessen immer mehr Dinge gleichzeit erledigen können. Schließlich gehen wir gerade vom Dual- zum Quad-Core über.
Als die Vortragenden allerdings vom sogennanten Many-Core mit über 100 “Ausführungssträngen” redeten, war mir klar, dass sich auch für mich und all die anderen Sequenziell-Denker einige Neuerungen ergeben werden.
Ende 2009 wird Intel eventuell den Grafikchip Larrabee herausbringen, der 16 Kerne mit jeweils 4 Hardware-Threads – also insgesamt 64 Ausführungsstränge – besitzen wird. Mir stellte sich sofort die Frage:
“Wie zum Teufel soll ich ein Programm schreiben, das 64 Dinge gleichzeitig macht?”
Threading Tools
Zum Glück haben sich diese Frage auch andere Programmierer gestellt und verschiedene Tools erstellt, die es ermöglich das Threading zu vereinfachen. Statt jeden einzelnen Thread selbst in Code zu gießen nutzt zum Beispiel OpenMP eine Pseudo-Sprache. Damit kann man einfach Schleifen in X gleichgroße Stücke zerlegen, dessen Rumpf dann jeweils in einem anderen Thread ausgeführt wird. Der eigentlich C++ Code verändert sich nicht. Man kann sogar ohne Probleme X=1 setzen und das Programm lediglich sequentiell ausführen.
Neben OpenMP gibt es auch noch zahlreiche andere Frameworks, die den Umgang mit Threads erleichtern sollen. Von Intel gibt es die Threading Building Blocks (TBB) und irgendwann Ct: Throughput Computing.
Das Amdahlsche Gesetz
Doch auch die Nutzung dieser Tools verspricht keine endlose Geschwindigkeitssteigerung. Amdahl’s Gesetz besagt nämlich, dass auch bei unendlich vielen Threads schon nur kleine sequentielle Abschnitte eines Programms die maximale Geschwindigkeitssteigerung stark begrenzen:
Geschwindigkeitsteigerung = 1 / (1 – P) mit P = Anteil des parallelisierbaren Codes
Bei nur 10% sequentiellem Code kann das Programm also maximal 10 mal schneller werden. Bei 5% maximal 20 mal so schnell, bei 2% maximal 50 mal so schnell. Aber wer schreibt heute schon Code der sich zu 98 % parallelisieren lässt?
Stellt sich nur noch die Frage, ob diese Entwicklung wirklich in die richtige Richtung geht?




Einen Kommentar verfassen