Daher enthalten Rechner neuerdings mehrere Prozessoren (sog. Kerne): z.Zt. bis zu acht, in naher Zukunft Dutzende, in etwas fernerer Zukunft noch mehr. Aktuelle Beispiele sind der 6-Kernchip Dunnington von Intel oder 8-Kernchip Niagara2 von Sun, aber es gibt auch bereits einen Chip mit 80 Kernen (den Polaris von Intel) und sogar einen mit 192 Kernen (den Metro von Cisco). Eine andere Quelle von sogar noch leistungsfähigerer Parallelität sind die Grafikprozessoren, z.B. von NVIDIA, AMD u.a. Am bekanntesten ist hier wohl der IBM Cellprozessor.
Damit wird das Problem der Programmierung derartiger Rechner (Parallelprogrammierung) von einem Nischenthema zu einer zentralen Herausforderung an die Software-Technologie. Dual- und Quadcores lassen sich noch effektiv betreiben, indem man die aktivsten Prozesse von Anwendungen und Betriebssystem auf die einzelnen Prozessoren verteilt - eine Aufgabe, die von der Software-Industrie gelöst werden kann. Spätestens bei acht Kernen wird dieses Vorgehen aber nicht mehr ausreichen, da die Zahl der verfügbaren Prozessoren die Zahl der i.d.R. aktiven Prozesse übersteigen wird. Um nicht Prozessoren brach liegen zu lassen, müssen Mittel gefunden werden, sie sinnvoll einzusetzen.
Ideen, wie dies geschehen kann, sind reichlich vorhanden. Sequenzielle Prozesse können aufgespalten, d.h. parallelisiert werden, sofern die Abhängigkeiten im Prozess dies zulassen. Prozesse können auf mehreren Prozessoren dupliziert oder variiert ablaufen, um die Ausfallsicherheit zu erhöhen. Analyse- und Wartungsprozesse können hinzugefügt werden, um den Programmablauf zusätzlich zu überwachen, zu verwalten und zu optimieren. Zur Umsetzung dieser Ideen sind Techniken gefragt, die gegenwärtig noch nicht marktfähig, gerade einmal angedacht oder noch überhaupt nicht erkannt sind.
Bei der Nutzung von Multicores gehört Parallelität i.d.R. nicht zur Problemstellung, sondern wird als Merkmal der Lösung angeboten. Sie ist kein notwendiges Mittel zur Lösung des Rechenproblems, sondern ein Optimierungsmittel. Folglich kann sie frei gestaltet werden, solange die Abhängigkeiten im Lösungsprozess gewahrt bleiben und die Multicore-Hardware in geeigneter Weise angesprochen wird. Parallelität kann in vielen Formen auftreten: statisch vorhersagbar oder sich dynamisch entwickelnd und verändernd, strukturiert oder unstrukturiert, grobkörnig oder feinkörnig - je nach Anwendung.
Termin | Thema | Vortragende(r) | Ausarbeitung | Folien | Betreuer |
---|---|---|---|---|---|
04.11 | Multicore- und GPGPU-Architekturen | Manuel Danisch | Handout | Folien | Lengauer |
11.11. | Parallelität durch Abstraktion | Andreas Wilhelm | Handout | Folien | Lengauer |
09.12. | MapReduce in der Praxis | Rolf Frank Daniel | Handout | Folien | Dörre |
16.12. | MapReduce als funktionales Skelett | Peter Lutz | Handout | Folien | Dörre |
20.01. | Multicore-Parallelität in Haskell | Stefan Boxleitner | Handout | Folien | Größlinger |
03.02. | C++: Boost.Thread und Intel TBB | Martin Freund | Handout | Folien | Größlinger |
10.02. | Performanz | Maximilian Binder | Handout | Folien | Lengauer |