Softwareentwicklung und High-Performance

Multi-Core-Prozessoren verbessern Software

10.09.2010
Von Robert Hilbrich

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)