Softwareentwicklung und High-Performance

Multi-Core-Prozessoren verbessern Software

10.09.2010 von Robert Hilbrich
Software verlangt nach immer leistungsstärkeren Prozessoren. Doch hier gibt es auf herkömmlichem Weg Grenzen der Entwicklung. Die Lösung lautet: Multi-Core-Architekturen.

Die Weiterentwicklung von Prozessoren wird wesentlich durch den stetig steigenden Bedarf der Software an immer mehr Rechenleistung getrieben. Die zusätzliche Leistung wird benötigt, um sowohl mehr Funktionen als auch eine höhere Performance des Systems zu realisieren. Seit den 70er Jahren spiegelt sich diese Entwicklung in einer Verdoppelung der Komplexität der Schaltkreise von Prozessoren alle zwei Jahre wider. Mit Hilfe einer gleichzeitig erhöhten Taktfrequenz konnte bisher auch alle zwei Jahre die Leistung eines Prozessors verdoppelt werden.

Bremser Leistungsaufnahme

Die letzten Jahre zeigen jedoch, dass die Taktfrequenz nicht weiter erhöht werden kann. Die Ursache dieser Stagnation liegt in der stark steigenden Leistungsaufnahme begründet: eine ein Prozent höhere Taktrate führt zu drei Prozent mehr Leistungsaufnahme. Zusammen mit einer weiteren Verringerung der Dicke von Leiterbahnen auf dem Schaltkreis, der so genannten Strukturbreite eines Fertigungsprozesses von Prozessoren, führt die überproportionale Erhöhung der Leistungsaufnahme mittlerweile zu Leistungsdichten, die nicht weit von denen eines Nuklearreaktors entfernt sind.

Multicore-System-Workshop

Das Fraunhofer-Institut für Rechnerarchitektur und Softwaretechnik (First) veranstaltet zum Thema Multi-Core-Systeme am 10. November 2010 einen Workshop.

Thema: "Multi-Core - die Zukunft für eingebettete Systeme".

Ort: Fraunhofer-Institut für Rechnerarchitektur und Softwaretechnik (First), Kekulestrasse 7, 12489 Berlin

Die dabei entstehende Abwärme kann nur noch mit großem Aufwand abgeführt werden. Vor allem bei eingebetteten Systemen verbietet sich daher, wenn die Leistung noch gesteigert werden soll, eine weitere Erhöhung der Taktfrequenzen.

Die Lösung lautet Multi-Core

Angesichts dieser so genannten "Power-Wall" bietet Multi-Core eine Alternative, um eine Leistungssteigerung ohne eine Erhöhung der Taktfrequenz zu erzielen. Multi-Core bezeichnet die Integration von zwei oder mehr unabhängigen Ausführungseinheiten (Cores) auf einem Silizium-Chip, so dass mehrere Befehle parallel ausgeführt werden können. Im Gegensatz zum temporalen Multi-Threading von Single-Core-Prozessoren, ist durch Multi-Core simultanes Multi-Threading von Anwendungen möglich.

Robert Hilbrich
Foto: Fraunhofer Institut

Während bereits in vielen Computern Dual- und Quad-Core-Prozessoren mit zwei beziehungsweise vier Kernen verfügbar sind, wird sich die Anzahl der Cores in einem Prozessor in den nächsten zehn Jahren voraussichtlich auf 100 bis 1000 erhöhen. Multi-Core- werden dann zu Many-Core-Prozessoren.

Während bei Multi-Core-Prozessoren noch weitgehend Techniken aus dem Bereich der Mehrprozessor-Systeme eingesetzt werden können, sind diese bei der hohen Anzahl der Kerne in Many-Core-Prozessoren (mehr als 100 Kerne) nicht länger effizient. Gebraucht werden neue Konzepte für die Softwareentwicklung. Der Trend zur Verdoppelung der Schaltkreiskomplexität alle zwei Jahre hält damit nach wie vor unvermindert an.

Aktuelle Trends

Die Roadmaps der verschiedenen Hersteller von Multi-Core-Prozessoren weisen deutlich in die Richtung vom Multi-Core- zum Many-Core-Prozessor mit weit über 100 Kernen auf einem Chip. Die Auswirkungen dieses Trends auf die Softwareentwicklung sind vielfältig.

- Da die bisherige Kommunikationsarchitektur zwischen Cores über eine mehrstufige Speicherhierarchie nur sehr schlecht auf mehr als 32 Cores skaliert, wird sie zukünftig durch skalierbare Kommunikationsarchitekturen auf dem Chip abgelöst werden. Eine sehr gute Skalierbarkeit bieten beispielsweise 2D-Mesh-Architekturen, bei denen die Cores anstelle eines gemeinsamen Busses über eine Gitterstruktur miteinander vernetzt sind, so dass sich redundante Kommunikationspfade ergeben. Zukünftige Prozessoren werden aus Gründen der Skalierbarkeit auch verstärkt verteilten Speicher für die einzelnen Cores bieten und damit klassische "Shared-Memory"-Programmiermodelle ablösen.

- Damit das Leistungspotenzial von vielen Cores auf einem Chip auch wirklich ausgenutzt werden kann, müssen die Daten schnell und effizient zugeführt werden können. Aus fertigungstechnischen Gründen kann die Bandbreite der Datenanbindung jedoch nicht genauso stark gesteigert werden, wie sich gegenwärtig die Anzahl der Cores erhöht. Dies liegt daran, dass sich die Pins eines Chips am Rand befinden und dessen Länge bei einer Verdoppelung der Fläche nur unterproportional ansteigt. Die Datenanbindung wird damit zukünftig den Prozessor als inhärent knappe Ressource eines Systems ablösen. Dieser Trend wird auch als Wandel vom "Computation-centric Computing" zum "Communication-centric Computing" bezeichnet.

- Speziell für die Softwareentwicklung auf eingebetteten Systemen bringt der Wandel zu Multi-Core vor allem zwei Herausforderungen mit sich:

Zusätzlich zu den homogenen Multi-Core-Architekturen wird es auch verstärkt heterogene Architekturen mit hoch integrierten, spezialisierten Rechenkernen auf einem Chip geben. Damit können Spezialaufgaben wie Multimedia oder kryptografische Funktionen effizient und energiesparend in Hardware realisiert werden. Allerdings wird eine effiziente Programmierbarkeit von heterogenen Systemen zukünftig auch eine Systementwicklung auf einem höheren Abstraktionsgrad erforderlich machen. Nur so kann verhindert werden, dass mit jeder neuen Prozessorgeneration eine aufwendige Neuimplementierung erforderlich wird.

- Durch die immer größere Komplexität eines eingebetteten Systems gestaltet sich die Vorhersage des Systemverhaltens und damit auch dessen Dimensionierung in frühen Entwicklungsphasen immer schwieriger und wird ungenauer. Zusätzlich zur Erfahrung der Systementwickler werden daher zukünftig gerade im Bereich von sicherheitskritischen Echtzeitsystemen auch spezialisierte Tools zum Einsatz kommen müssen, die eine frühe Analyse und Bewertung alternativer Multi-Core-Architekturen hinsichtlich des erreichbaren Echtzeitverhaltens ermöglichen.

Die Vorteile der Multi-Core-Prozessoren

Die Parallelisierung von Anwendungen und der damit verbundene Anstieg des Durchsatzes eines Multi-Core-Prozessors ist die derzeit einzige Möglichkeit, durch Weiterentwicklung der Hardware die Leistung der Software zu steigern. Neben der Beschleunigung von bereits inhärent parallelen Anwendungsbereichen wie zum Beispiel Web-Servern, Grafik- und Videobearbeitung oder Netzwerk-Paketverarbeitung ist die Multi-Core-Technik prinzipiell auch gut geeignet, um viele bestehende Single-Core-Systeme auf wenigen Multi-Core-Maschinen zu konsolidieren.

IBMs Power6-Prozessor ist ein Vier-Kern-Prozessor. Quelle: IBM
Foto: IBM

Besonders bei der Konsolidierung von verteilten Systemen können Anwendungen von der zusätzlichen Leistung eines Multi-Core-Prozessors profitieren. Während das physikalische Netzwerk eines verteilten Systems häufig durch unzuverlässige Verbindungen sowie spürbare Latenzen in der Übertragung gekennzeichnet ist, verläuft die Kommunikation zwischen Cores auf einem Chip sehr zuverlässig und mit geringen Latenzen.

Multi-Core-Prozessoren besitzen daher das Potenzial, den Platzverbrauch eines eingebetteten Systems, dessen Gewicht sowie dessen Leistungsanforderungen spürbar zu senken. Bei gleicher Leistung zeigt ein konsolidiertes Multi-Core- im Vergleich zu einem Single-Core-System eine geringere Leistungsaufnahme, so dass auch weniger Wärme abgeführt werden muss. Multi-Core-Prozessoren tragen dazu bei, die Herstellungskosten eines eingebetteten Systems spürbar zu reduzieren und somit einen signifikanten Wettbewerbsvorteil zu erringen.

Herausforderungen für die Softwareentwicklung

Typischerweise ist die Software im Bereich eingebetteter Systeme sequenziell aufgebaut. Der dabei implementierte Algorithmus arbeitet eine Menge einzelner Schritte in einer definierten Reihenfolge ab, um die Systemfunktion zu erfüllen. Bevor es Multi-Core-Prozessoren gab, profitierte Software automatisch von einer höheren Leistung des Prozessors. Eine Steigerung der Taktfrequenz um 30 Prozent führte in der Regel auch zu einer um etwa 30 Prozent schnelleren Ausführung der Anwendung. Durch die "Power-Wall", die eine weitere Erhöhung der Taktfrequenz verhindert, kann klassische, sequenzielle Software jedoch nicht mehr automatisch von der zusätzlichen Leistung der neuen Prozessoren profitieren. Um weiterhin wettbewerbsfähig zu bleiben, müssen die bestehenden Anwendungen parallelisiert oder komplett neue, parallele Anwendungen entwickelt werden.

Softwareentwickler auf die Schulbank

Der Wechsel von der sequenziellen zur parallelen Programmierung ist mit neuen Herausforderungen für die Softwareentwicklung verbunden. Er wird daher nicht mehr nur in der Forschung als Paradigmenwechsel wahrgenommen, sondern auch in der Industrie als eine der wesentlichen Herausforderungen der Informatik für die nächsten Jahre gesehen. David Patterson, Professor für Computer Science in Berkeley, drückte dies prägnant im Rahmen einer Panel-Diskussion aus: "No one knows how to design a 15 GHz processor, so the other option is to re-train all the software developers” - keiner wisse, wie das Design eines mit 15 GHz getakteten Prozessors aussehe. Also bleibe nichts anderes übrig, als alle Softwareentwickler neu auszubilden.

Die wahre Stärke der Multi-Cores

Obwohl Multi-Core die neueste Entwicklung im Prozessorbereich beschreibt, ist die parallele Verarbeitung von Anwendungen nichts fundamental Neues. In der Vergangenheit wurden Parallelrechner bereits im High-Performance-Computing zur Simulation von Modellen erfolgreich eingesetzt. Im Desktop- und Embedded-Bereich konnten sich Single-Core-Prozessoren hingegen lange behaupten, da immer neue Wege zur Aufrechterhaltung der Leistungssteigerung entdeckt wurden. Neu an Multi-Core ist daher vielmehr, dass es in Anbetracht der "Power-Wall" die derzeit einzige verfügbare Technik zur Leistungssteigerung von allgemein verfügbaren Prozessoren darstellt. Nach Jahren der sequentiellen Entwicklung steht die Softwareentwicklung nun vor einem grundlegenden Wandel. Während die Entwicklung paralleler Software bisher Experten in speziellen Anwendungsbereichen vorbehalten war, werden in den nächsten Jahren nahezu alle Domänen und vor allem die eingebetteten Systeme damit konfrontiert werden.

Die Herausforderungen der parallelen Programmierung liegen in der stark ansteigenden Komplexität der Systeme begründet. Während bereits die sequenzielle Programmierung hohe Anforderungen an die Entwickler stellt, um fehlerfreien, effizienten und leicht wartbaren Code zu erhalten, fügt die parallele Programmierung eine neue Ebene der Komplexität hinzu. Zusätzlich können nun Systemverklemmungen wie Deadlocks oder Livelocks, Dateninkonsistenzen durch einen ungeschützten Zugriff oder ein nichtdeterministisches Verhalten durch fehlende Synchronisationsmechanismen (Race-Conditions) zum Versagen eines eingebetteten Systems führen.

Entscheidender Faktor: Granularität

Die Tatsache, dass nun mehrere Programmstränge parallel ausgeführt werden können, erfordert Synchronisationstechniken, um den Zugriff auf gemeinsam genutzte Speicherbereiche und andere Ressourcen zu kontrollieren. Die Wahl der "richtigen" Granularität dieser Synchronisationsverfahren wirkt sich wesentlich auf die Performance der Anwendung aus. Sie erfordert Erfahrung sowie den Einsatz adäquater Tools, um die Softwarequalität zu gewährleisten. Gleichzeitig muss das Softwaredesign aber auch auf Skalierbarkeit ausgelegt sein, um zukünftig neben Dual- oder Quad-Core- auch Multi-Core-Prozessoren mit 100 oder 1000 Kernen nutzen zu können. Erst dann kann Software wieder automatisch von den Weiterentwicklungen im Hardwarebereich profitieren.

Neben der stark ansteigenden Komplexität und ihren Auswirkungen auf die Softwarequalität und Skalierbarkeit führt die parallele Programmierung auch zu anderen Herausforderungen, die besonders für eingebettete Systeme im sicherheitskritischen Bereich relevant sind: Echtzeitfähigkeit und Zertifizierung.

Im sicherheitskritischen Bereich wird unter Echtzeitfähigkeit die zeitliche Vorhersagbarkeit des Systemverhaltens verstanden. Während dies bei Single-Core-Prozessoren weitgehend realisiert ist, stellen die gemeinsam genutzten Ressourcen eines Multi-Core-Prozessors, wie zum Beispiel Caches, Kommunikationsbusse oder I/O-Anschlüsse, bei der parallelen Ausführung eine Hürde zur zertifizierbaren Echtzeitfähigkeit dar. Die Wartezeit bei paralleler Ressourcennutzung ist in der Regel nichtdeterministisch, so dass keine präzisen Aussagen über das zeitliche Verhalten mehr möglich sind.

Mehrkern-Prozessoren

Vom Dual- bis zum Many-Core-Prozessor gibt es heute bereits eine Vielzahl von Chips am Markt, die unterschiedliche Bedürfnisse der Anwender abdecken. Hier eine Auswahl.

1. Zweikernprozessoren:

- AMD: Athlon 64 FX, X2, Opteron, Turion 64 X2, Athlon II, Phenom II X2;

- ARM: Hier gibt es verschiedene Implementationen;

- Freescale: MPC8601D;

- Hewlett-Packard: PA-RISC PA-8800, 8900;

- IBM: POWER4, 4+, 5, 5+, PowerPC 970 MP;

- Intel: Core Duo, Core 2 Duo, Core 2 Extreme, Core i Serie, Pentium Dual-Core, Pentium Extreme Edition, Xeon DP, Itanium 2;

- Sun Microsystems: UltraSparc IV, UltraSparc IV;

- Fujitsu: Sparc64 VI;

- VIA: Nano;

2. Dreikernprozessoren

- AMD: Phenom X3, II X3, Athlon II X3;

- IBM: XCPU;

3. Vierkernprozessoren

- AMD: Opteron (K10), Phenom X4, Phenom II X4;

- IBM: POWER5+ , POWER6;

- Intel: Core 2 Extreme, Core 2 Quad, Xeon, Core i7;

- Sun Microsystems: UltraSparcT1;

- Fujitsu: Sparc64 VII;

4. Sechskernprozessoren

- Intel: Xeon "Dunnington", i-Series "Gulftown"

- AMD: Opteron "Istanbul", Phenom II "Thuban";

5. Prozessoren mit mehr als sechs Kernen

- IBM/Sony/Toshiba: Cell;

- IBM: Power7;

- Sun: UltraSparc T1 (Niagara), UltraSparc T2 (Niagara 2), UltraSparc T2+;

- AMD: Magny-Cours;

- Fujitsu: Sparc64 VIII, Parallax Propeller;

6. Many-Core-Prozessoren

- IBM / Darpa/ UT-Austin: Trips;

- Intel: Terascale.

Quelle: Wikipedia

Früher konnte das Echtzeitverhalten durch prioritätsbasierende Verfahren zur Laufzeit sichergestellt werden. Dabei bekommen Applikationen mit der aktuell höchsten Priorität auch alle benötigten Ressourcen exklusiv zugewiesen, um so das spezifizierte zeitliche Verhalten zu erreichen. Bei Multi-Core-Prozessoren werden Applikationen trotz unterschiedlicher Prioritätsstufen parallel abgearbeitet, so dass auch die dafür verwendeten, gemeinsam genutzten Ressourcen geteilt werden müssen. Im Vergleich zu einem Single-Core-System kann sich damit ein komplett anderes, nicht deterministisches Systemverhalten ergeben. Zukünftig werden hier daher vermehrt statische Verfahren zum Einsatz kommen müssen, um den Ressourcenzugriff mit Hilfe eines festen Schemas deterministisch zu gestalten und damit eine Zertifizierung zu ermöglichen. (jm)