Vorheriger Beitrag: 12 Thesen und Antithesen zur Multicore-Programmierung
Multicore-Programmierung im .NET-Umfeld – Teil 1
Gestern war ich auf der zweiten Multicore-Session der OOP 2009 (am Dienstag wohnte ich dem Vortrag von Professor Tichy der Uni Karlsruhe bei). Die Mittwoch-Veranstaltung trug den Titel “Programmierung für Multicore-CPUs”, die sich im Speziellen an .NET-Entwickler richtete. Warum Klaus Bode nicht auf native Programmiersprachen wie C++ eingegangen ist, erklärte er mir im Anschluss an seinen Vortrag; das ist aber eine andere Geschichte.
Die Session gliederte sich in vier Abschnitte: Einleitung, Parallelisierung durch Multithreading, neue Konzepte in .NET 4.0 und Ausblick. Die Zusammenfassung verschweige ich einfach mal.
Der erste Teil “Einleitung” beschäftigte sich vor allem mit der Frage, warum das kostenlose Mittagessen vorbei ist. Dies ist die zugegebenermaßen schwachsinnige Übersetzung eines englischsprachigen Artikels, der sich mit der Tatsache beschäftigt, dass Prozessoren seit Jahren nicht mehr schneller werden (sondern eher langsamer) und man daher als Entwickler keine Geschwindigkeitszuwächse mehr erwarten kann, die quasi kostenlos für mehr Leistung sorgen, ohne dass man hierfür am Quellcode herumschrauben muss. Das heißt dann im Umkehrschluss, dass sich Programmierer in Zukunft intensiv mit dem Thema Parallelprogrammierung auseinandersetzen müssen, um aus den künftigen Multicore-Prozessoren das Optimum herauszuholen.
Um die möglichen Schwierigkeiten der Parallelprogrammierung zu verdeutlichen, wies Rohe zunächst auf die Architektur des Core 2 Duo Prozessors von Intel hin, der aus zwei Kernen mit einem eigenem L1-Cache besteht, aber zudem über einen gemeinsamen L2-Cache verfügt. Und genau das stellt eine der wesentlichen Herausforderungen der Parallelprogrammierung dar: der gemeinsame Speicherzugriff mit all seinen unvorhersehbaren Verklemmungen und Problemen!
Über die Grenzen der Parallelisierung sprach Rohe natürlich auch, und zwar mithilfe des Amdahlschen Gesetzes, das eher pessimistisch ausgelegt ist. Tenor von Amdahl, einem amerikanischen Computerarchitekten: Je höher der Anteil an sequenziellem Quellcode innerhalb einer Anwendung ist, desto weniger profitiert eine Anwendung von der Parallelisierung. Dies kann laut Amdahl so weit gehen, dass selbst eine große Zahl an Prozessorkernen keinen nennenswerten Geschwindigkeitszuwachs mit sich bringt – allen Parallelisierungsanstrengungen zum Trotz.
Aber es gibt auch das Gesetz von Gustafson, das viel optimistischer als das von Amdahl ausgelegt ist. Gustafson kam im Zuge seiner Studien zu dem Schluss, dass die Parallelisierung von der verfügbaren Zahl der Prozessorkerne abhängt. Ergo: Je mehr CPUs vorhanden sind, desto besser skaliert die parallelisierte Anwendung.
Seine Einleitung schloss Rohe mit der Unterscheidung von Agenten, Aufgaben und Daten, auf denen jede Programmarchitektur basiert. Das Wissen um diese drei Programmpfeiler ist für das Verständnis der parallelen Programmierung von elementarer Wichtigkeit.
Programmhinweis: Die Teile zwei und drei sowie die Zusammenfassung gibt es morgen hier auf diesem Kanal. So, stay tuned. Am besten, ihr abonniert das Blog einfach als RSS-Feed. Oder lasst euch neue Beiträge via Feedburner in die Inbox eures Mailprogramms schicken.


Trackbacks & Pingbacks