Sogar in kompakten eingebetteten Anwendungen können Dual-Core-Prozessoren auf einem Board gleicher Größe bei identischer Taktfrequenz eine doppelt so hohe Leistung erreichen wie Standard-Prozessoren. Kürzlich vorgestellte Einplatinenrechner (wie beispielsweise der Einplatinenrechner F18 von MEN Mikro Elektronik, siehe Kasten) zeigten eine um 11 % bis 17 % höhere Leistung als Dual-Core-Boards der vorherigen Generation – mehr als 24 000 MIPS und 16 000 MFLOPS im Standard-Testverfahren. So schafft die Kombination von Multi-Core-Prozessoren mit einem an die Anwendung angepassten Betriebssystem, kompatiblen Chipsätzen und in der Industrie bewährten Schnittstellen neue Märkte für Systemanbieter und bietet ein bisher ungekanntes Leistungsniveau für Endnutzer.
Die Herausforderung bei der Nutzbarmachung dieses Potentials liegt darin, eine große Menge von technischen Möglichkeiten so zu kombinieren, dass eine schlüssige Lösung entsteht. Bei der Hardware muss der maximale Datendurchsatz von leistungsstarken Prozessoren optimiert werden. Bei der Software gehört dazu die Integration von verschiedenen Betriebssystemen und unterschiedlicher, für die Erfüllung der Aufgabe notwendiger Anwendungs-Software. Bei der Peripherie müssen wachsendes Datenvolumen, höhere Geschwindigkeit und komplexe I/O-Signale und damit einhergehend die Temperaturentwicklung, das Positionieren von Sensoren, Kommunikationssignale und Videoeingänge unter einen Hut gebracht werden.
Von Multitasking zu Multithreading
Einfach einen Multi-Core-Prozessor in der nächsten Systemgeneration zu integrieren, reicht jedoch nicht aus. Um das ganze Potential der Multi-Core-Rechner für komplexe Anwendungen nutzen zu können, müssen Nutzer von eingebetteten Systemen ihre Software an die Funktionsweise der Multi-Core-Prozessoren anpassen. Glücklicherweise gibt es, abhängig von der Anforderung, mehrere mögliche Strategien, um dies zu erreichen (Bild 1). Zuerst einmal muss die Software-Architektur jedoch daraufhin überprüft werden, ob der Code die Vorteile der zusätzlichen Cores überhaupt nutzen kann.
Der vielleicht einfachste Weg vom Single-Core- zum Multi-Core-System ist der Multitasking-Ansatz, wobei man das Betriebssystem nutzt, um bestimmte Prozesse bestimmten Cores zuzuteilen. Diese Methode lässt sich nicht ohne weiteres auf mehrere Cores erweitern, ist aber dank ihrer Einfachheit oft als kurzfristige Lösung attraktiv.
In Installationen mit langen Single-Thread-Anwendungen, wie Medienserver mit großen Mengen an vorhandenem seriellen Code, kann verteilte Verarbeitung dazu dienen, die Anwendung in zwei Teile zu teilen und jede Hälfte auf einem anderen Core laufen zu lassen. Dies ist keine ideale Lösung, bietet dem Endbenutzer jedoch Flexibilität bei Lastausgleich und Leistung.
Die beste Leistung wird durch das Threading der Anwendung erreicht (Bild 1, ganz rechts). Diese Methode bietet besonders viele Vorteile bei Anwendungen mit sich wiederholenden Prozessen. Die Initiierung eines neuen Threads für diese sich wiederholenden Prozesse geht schneller als das Starten eines neuen Prozesses, weil das Speichersegment oft nicht geändert zu werden braucht und die benötigten Befehle möglicherweise noch im Befehlsspeicher liegen. Wenn dies ordnungsgemäß ausgeführt wird, wird der Cache durch Threading am besten ausgenutzt, und sich wiederholende Algorithmen werden schneller abgearbeitet.
Multi-Core-Anwendungen mit mehreren Betriebssystemen
Was ist zu tun, wenn mehrere Anwendungen jeweils ein anderes Betriebssystem erfordern? In diesem Fall brauchen nicht nur die einzelnen Anwendungen ihre eigenen Software-Threads, sondern auch die Betriebssysteme. Hier nutzt die Virtualisierungstechnologie (VT) von Intel die Vorteile der Multi-Core-Technik am besten aus.
Bei dieser Virtualisierung verrichtet eine physikalische Maschine, also ein PC, Single-Board-Computer etc., die Arbeit von mehreren „virtuellen Maschinen“. Die Virtualisierung benutzt eine Systemsoftware-Ebene namens Virtual Machine Monitor (VMM), um den Zugriff auf die physikalische Hardware zu steuern. Dadurch können mehrere Betriebssysteme auf einmal laufen, ohne dass bedeutender Emulations-Overhead entsteht. VMM berücksichtigt vorhandene Hardware-Schnittstellen, so dass die Komplexität verringert und keine I/O-Emulation für direkt abgebildete I/O-Geräte benötigt wird.