Multicore-Programmierung Eingebettete Kerne

Bei PCs, Workstations und Servern dominieren heute Multicore-Prozessorsysteme den Markt. Nun hat dieser Trend auch bei Embedded Systemen Fuß gefasst. Jedes Halbleiterunternehmen hat einen Multicore-Prozessor auf seiner Roadmap, und ständig bringen Hersteller von Tools oder Betriebssystemen neue oder verbesserte Unterstützung für den Einsatz von derartiger Prozessoren in Embedded Systemen auf den Markt.

Embedded Systeme müssen auf Ereignisse in der Umwelt schnell reagieren und gleichzeitig komplexe Aufgaben erfüllen. Dies lässt sich mit paralleler Verarbeitung leichter bewältigen. Daher gehören Multiprozess- und Multiprozessor- Applikationen bereits seit vielen Jahren zur Standardausstattung in diesem Bereich. So besteht etwa ein Computertomograph aus einer Vielzahl von Subsystemen wie Strahlungssteuerung, Bildbearbeitungseinheit sowie Verwaltungs-, Kommunikations- und Tischsteuerungseinheit. Jedes dieser Subsysteme wird in der Regel durch einen eigenen Prozessor gesteuert.

Wozu Multicore?

Bis vor wenigen Jahren konnten Leistungssteigerungen der Prozessoren primär durch immer höhere Taktfrequenzen erreicht werden. Der aus der höheren Frequenz normalerweise resultierende höhere Energieverbrauch ließ sich durch immer kleinere Strukturen weitgehend kompensieren. Da diese Strategie an ihre Grenzen stieß, beendete Intel das Rennen um höhere Taktfrequenzen und machte Mehrkernprozessoren bereit für den Massenmarkt.

Die Rechnung ist einfach: Halbiert man die Maximalfrequenz eines Chips, so sinkt die von ihm aufgenommene elektrische Leistung auf etwa ein Viertel. Daraus folgt, dass zwei Prozessoren mit der Frequenz f/2 lediglich die Hälfte der Energie eines mit f getakteten Prozessors benötigen. Theoretisch könnte man also bei gleicher Rechenleistung den Energiebedarf halbieren oder bei gleichbleibendem Energieverbrauch die Performance verdoppeln.

Dieser Effekt eröffnet ganz neuen Spielraum beim Einsatz dieser Technologie in portablen Embedded Systemen wie Handhelds, Mobiltelefonen, MP3-Playern und Spielekonsolen, die nach immer mehr Leistung bei längerer Batterielaufzeit verlangen.

Aber auch für Embedded-Multiprozessorsysteme wie den beschriebenen Computertomographen ist die Multicore-Technik interessant. Jede zusätzliche Prozessorplatine bedeutet mehr Komplexität, zusätzlichen Platzbedarf, Verkabelungsaufwand, Energieverbrauch sowie höhere Entwicklungs- und Produktionskosten. Im Zuge einer Migration von einer Multiboard- zu einer Multicore-Umgebung ließe sich allein durch die Konsolidierung der Hardware ein signifikanter Anteil der Kosten sparen. In Anbetracht der Tatsache, dass geringer Energieverbrauch und verbesserte Energiebilanz (MIPS pro Watt) zunehmend zum Kaufkriterium werden, scheint der Multicore-Technologie die Zukunft zu gehören. Warum wird sie im Embedded-Bereich dennoch bisher nur zögerlich genutzt?

Herausforderungen der Multicore-Systeme

Multiprozessorsysteme sind konzeptionell auf parallele Verarbeitung ausgelegt, eine Migration auf Multicore sollte also relativ einfach durchzuführen sein. Leider ist dem nicht so. Multicore bedeutet nicht einfach eine Kombination mehrerer eigenständiger Prozessoren auf einem Chip, sondern dass die Cores in direkter Abhängigkeit zueinander stehen und sich gemeinsame Ressourcen wie Speicher, Peripheriegeräte und Interrupt-Controller teilen.

Je nach Architektur und Hersteller teilen sich etwa heutige Multicore-Prozessoren einen Bus zur Kommunikation mit dem Hauptspeicher und der Peripherie. Das konfliktfreie Management der gemeinsamen Ressourcen ist also bereits die erste Herausforderung, speziell wenn verschiedene Betriebssysteme auf den Cores laufen sollen.

Grundsätzlich gibt es zwei unterschiedliche Modi, wie man ein Multicore-System betreiben kann. Beim »Symmetrischen Multiprocessing « (SMP) kontrolliert ein Betriebssystem alle Cores, beim »Asymmetrischen Multiprocessing« (AMP) läuft auf jedem Core eine eigene Betriebssysteminstanz, wobei dann entweder auf allen Cores das gleiche Betriebssystem (homogenes AMP) läuft oder auf jedem Core ein anderes (heterogenes AMP). Der AMP-Modus bietet sich an, wenn die Applikation bereits (wie bei einem Multiprozessorsystem) partitioniert ist oder leicht partitioniert werden kann und nur wenig oder zumindest wohl definierter Datenaustausch zwischen diesen Partitionen stattfindet. Allerdings benötigt ein System im AMP-Betrieb generell mehr Speicher, und das Aufsetzen der Kommunikation zwischen den Cores ist schwieriger, besonders wenn unterschiedliche Betriebssysteme auf den verschiedenen Cores zum Einsatz kommen.

Im SMP-Modus ist der Zugriff auf gemeinsame Ressourcen wie Bus und Speicher vereinheitlicht. Aus Sicht des Entwicklers setzt die Applikation nur auf einem Betriebssystem auf, das die Aufgaben gleichmäßig auf die Cores verteilt (Dynamic Load Balancing). Daten lassen sich relativ einfach und schnell zwischen den Cores austauschen, allerdings muss das Betriebssystem die Cores verwalten und synchronisieren, was wiederum Auswirkungen auf die Verarbeitungsgeschwindigkeit des Betriebssystems hat.