Die Prozessor-Welt war bisher ganz einfach: Durch die Erhöhung der Taktfrequenz erhöhte sich die Leistung. Mit Hilfe verschiedener Tricks konnte man auch die Leistungsaufnahme einigermaßen unter Kontrolle halten. Inzwischen ist allerdings der Punkt erreicht, an dem die Kosten für die zusätzliche Leistungssteigerung in keinem gesunden Verhältnis mehr zum Ergebnis stehen. Zudem führen selbst minimale Leistungssteigerungen zu einem dramatisch höheren Energieverbrauch.
Dafür gibt es drei Gründe: Die Leistungsaufnahme ist zunächst einmal direkt proportional zur Frequenz. Jede Frequenzerhöhung bringt also unweigerlich eine Erhöhung der Leistungsaufnahme mit sich. Dann muss zur Erhöhung der Frequenz die Eingangsspannung anheben. Da die Leistungsaufnahme proportional zur Spannung im Quadrat ist, schlägt sich diese Anhebung ebenfalls sofort nieder. Und schließlich vergrößert die schnellere Taktung des Prozessors das Delta zwischen CPU-Geschwindigkeit und Bus-Geschwindigkeit. Um das Delta auszugleichen, sind zusätzliche Transistoren nötig, die ihrerseits wiederum die Leistungsaufnahme erhöhen. Darüber hinaus führt die erhöhte Leistungsaufnahme zu höheren Anforderungen an die Kühlung, gleichzeitig verringern sich die Stabilität und Lebensdauer des Prozessors.
Höhere Effizienz durch Multicore
Als Alternative haben sich schon seit einiger Zeit Prozessoren mit mehreren Kernen etabliert. Sie ermöglichen eine bessere Leistung bei gleichzeitig geringerer Leistungsaufnahme. Dabei sind nicht nur die einzelnen Kerne, sondern auch das Multicore-System effizienter als ein großer, monolithischer Kern. Aber nicht nur die geringere Leistungsaufnahme spricht für die Mehrkerner. Sie können mit einer deutlich höheren Taktrate arbeiten, als dies zwischen zwei physikalisch getrennten Chips möglich ist.
Und nicht zuletzt spielt auch die Kostenfrage eine Rolle: Durch die Kombination verschiedener Funktionen in einem Gehäuse benötigen Multicore-Prozessoren in der Regel weniger Komponenten. So integrieren aktuelle Multicore-CPUs einen Grafik-Prozessor, wodurch man nicht nur auf die zusätzliche GPU verzichten kann, sondern sich durch die Nutzung des internen Caches und Speichers auch die Grafik-Verarbeitung vereinfacht und beschleunigt.
Allerdings offenbaren die Multikerner auch Schwächen: So verschlechtert die Integration eines Multicore-Chips die Produktionsausbeute. Zudem ist das Wärmemangement bei Multicore-Prozessoren deutlich anspruchsvoller als bei Prozessoren mit einem Kern. Und wenn sich zwei Kerne den gleichen System-Bus und die Speicherbandbreite teilen, fällt der Leistungsvorteil gegenüber einem Single-Core-Prozessor deutlich geringer aus.
Software-Anpassungen sind unumgänglich
Aus Hardware-Sicht bieten Multicore-Prozessoren überwiegend Vorteile: Man bekommt mehr Leistung bei geringer Leistungsaufnahme. Die Frage ist nur: Was fängt man mit der zusätzlichen Leistung an? Hier kommt der Software-Entwickler ins Spiel. Denn nur wenn die Software parallel läuft, lassen sich die verschiedenen Kerne sinnvoll nutzen. Um also die Ressourcen eines Multicore-Systems ausschöpfen zu können, sind Anpassungen sowohl beim Betriebssystem als auch bei den Anwendungen notwendig.
Einer der wichtigsten Gründe für den Einsatz von Multicore-Prozessoren ist die Leistungssteigerung durch das parallele Verarbeiten von Daten. Mit symmetrischem und asymmetrischem Multiprocessing sowie Virtualisierung stehen dabei verschiedene Möglichkeiten zur Verfügung. Beim symmetrischen Multiprocessing verteilt ein einzelnes Betriebssystem (OS) die Aufgaben auf die einzelnen Kerne und verwaltet die allgemeinen Speicher- und Hardware-Ressourcen. Im Gegensatz dazu erlaubt das asymmetrische Multiprocessing (AMP), auf jedem Kern eine eigene Software laufen zu lassen. So können auf einem System gleichzeitig Echtzeit-deterministische Aufgaben und eine grafische Benutzeroberfläche laufen. Welche Lösung am sinnvollsten ist, hängt von der Anwendung ab. SMP hat den Vorteil, die Tasks sinnvoll auf die vorhandenen Kerne verteilen zu können. AMP ist effizienter, da weniger Synchronisierung zwischen den Kernen notwendig ist.
Mehr Möglichkeiten durch Virtualisierung
Will man auf einem Multicore-System mehrere Betriebssysteme laufen lassen (z. B. RTOS und Allzweck-OS), müssen sie entweder in einem Master-/Slave-Verhältnis stehen oder man verwaltet sie mit einem Hypervisor, der Partitionen oder virtuelle Boards erstellt. In der Regel werden dazu bestimmte Bereiche des Systems virtualisiert: Durch die Virtualisierung des Prozessors kann man mehrere virtuelle CPUs auf einer physikalischen CPU laufen lassen. Dabei erhält jede virtuelle CPU einen Teil der realen Prozessor-Zyklen. Mit der Virtualisierung des Speichers lässt sich der physikalische Speicher so aufteilen, dass verschiedene Partitionen Teile des physikalischen Speichers nutzen können. Ein Betriebssystem, das in einer derartigen Partition läuft, kann den virtuellen Speicher auch zur Implementierung von Prozessen nutzen. Wenn mehrere virtuelle Boards sich serielle Schnittstellen, Ethernet-Ports, Grafiken etc. teilen, müssen diese ebenfalls virtualisiert werden. Dies erfolgt in der Regel über eine Schnittstelle in der Partition, damit das OS nicht physikalisch auf die Devices zugreifen muss.
Bei der Nutzung eines Hypervisors lässt man überlicherweise nicht verschiedene Partitionen auf einem Kern laufen, sondern weist einen oder mehrere Kerne einem virtuellen Board zu. Mit diesem so genannten Supervisor müssen die Cores nicht mehr Time-Slices zugewiesen werden und das OS kann deutlich effizienter arbeiten. Speziell für den Embedded-Bereich gibt es dedizierte Hypervisoren, die direkt auf der Hardware laufen. Dabei kommt es vor allem auf die Leistung und die Isolation bestimmter Bereiche an. Ausgehend von diesen Anforderungen ergeben sich folgende Design-Eigenheiten in Embedded-Systemen:
Die Peripherie wird nach Möglichkeit direkt im Gast-OS gemappt.
Der Hypervisor ist skalierbar, dadurch wird die Virtualisierung der einzelnen Einheiten optional und ermöglicht die Wahl zwischen Leistung und Isolierung.
Der Hypervisor ist in der Regel sehr klein, um die Zertifizierung zu vereinfachen und das System schnell zu machen.
Die Gastbetriebssysteme sind meist paravirtualisiert. Das heißt, sie werden modifiziert, um möglichst effizient auf dem Hypervisor zu laufen.
Keine Vorteile ohne Software
Es wird deutlich, dass die Anforderungen an die Software in einem Multicore-System deutlich zunehmen. Aber mit dem Genannten ist es noch nicht getan. Bei der Entwicklung muss man beispielsweise auch noch die Kommunikation zwischen den Kernen berücksichtigen. Und nicht zuletzt müssen die richtigen Tools für Konfiguration, Prototyping, Analyse, Diagnose und Test zur Verfügung stehen.
Multicore bietet für die Embedded-Entwicklung zahlreiche neue Möglichkeiten. Mag der Umstieg aus Hardware-Sicht auch einfach sein, gestaltet er sich von der Software-Seite durchaus komplex. Und nur mit der sinnvollen parallelen Verarbeitung durch die Software können die vielfältigen Möglichkeiten von Multicore-Prozessoren tatsächlich genutzt werden.