Multicore ARM® Microcontroller sind eine bedeutende Erweiterung in der Embedded Systems-Technologie, weil sie in der Lage sind, komplexere Aufgaben durchzuführen, die Anwendungsleistung zu verbessern und den Stromverbrauch zu senken. In diesem Blog wollen wir uns die verschiedenen Multicore-Konfigurationen von ARM anschauen und Optimierungsstrategien erkunden, um das meiste aus Multicore MCUs von ARM in Embedded Systems herauszuholen.
Die für ihre Effizienz und Leistung bekannte ARM-Architektur wird flächendeckend in zahlreichen Anwendungsgebieten eingesetzt, vom Smartphone bis zu industriellen Steuerungssystemen. Arm Cores werden in vielfältigen Konfigurationen angeboten, darunter sind die Serien Cortex-A, Cortex-R und Cortex-M, die für verschiedene Applikationen ausgelegt sind, vermutlich die bekanntesten:
Mehrkern-Konfigurationen können durch parallele Verarbeitung und effizientes Datenmanagement leistungssteigernd wirken. Ein Mehrkern-Prozessor kann extern auf zweierlei Weise gesehen werden: Als einzelne Einheit oder als Cluster – durch einen Systemdesigner oder ein Betriebssystem – der bzw. das die zugrunde liegenden Ressourcen von der Anwendungsschicht abscheiden kann, oder in Gestalt mehrerer Cluster, wobei jeder Cluster mehrere Kerne enthält.
Die Hochleistungsserie Cortex-A kann Cluster für verbesserte Leistungsmuster und Energieeffizienz verwenden. So können etwa einige auf Cortex-A-Kernen basierende Systems-on-Chips (SoCs) mehrere Kerne mit gemeinsamen Caches und Speicher-Controllern zu Clustern bündeln. Die Serien Cortex-R und Cortex-M sind primär auf Echtzeit-Leistung bzw. niedrigen Stromverbrauch ausgelegt und implementieren typischerweise keine Cluster im herkömmlichen Sinne. Sie können ebenfalls Mehrkern-Konfigurationen aufweisen, aber diese Kerne werden unabhängig voneinander ohne die mit Clusterarchitektur assoziierten geteilten Ressourcen betrieben.
Heute enthalten selbst kostengünstige Mikrocontroller-Plattformen wie Raspberry Pi RP2040 zwei M0+-Kerne. Mehrkern-Hardware dominiert also zunehmend den Markt und ist nicht mehr nur auf teurere Produkte beschränkt. Allerdings kann sie auch nicht alle Probleme lösen, denn eine Hardware kann noch so gut designt sein – ist der Code ungeeignet oder fehlerhaft geschrieben, kann dies dennoch zu Beeinträchtigungen im Systembetrieb führen.
In den folgenden Abschnitten möchte ich einige Tipps zur Programmierung leistungsstarker Software für Multicore Mikrocontroller von ARM teilen.
Für eine erfolgreiche Multicore-Programmierung müssen Möglichkeiten zur parallelen Aufgabenausführung innerhalb Ihrer Anwendung ermittelt werden. Dies sollten Aufgaben sein, die eigenständig sind und gleichzeitig ohne Datenabhängigkeiten ausgeführt werden können. Dazu können folgende gehören:
Haben Sie parallele Aufgaben ermittelt, wählen Sie ein passendes Programmierungsmodell, um den Kernen Aufgaben zuzuweisen. Gängige Modelle sind beispielsweise:
Bei einigen Softwareausführungen ist entscheidend, auf welchem Kern der Code läuft. Die globale Initialisierung wird typischerweise durch einen auf einem einzelnen Kern laufenden Code ausgeführt, gefolgt von der lokalen Initialisierung auf allen Kernen. Es gibt zwei Möglichkeiten, um zu ermitteln, welcher Kern den Code ausführt:
Auch diese Designelemente sollten Sie für die Softwareoptimierung einbeziehen:
Die Parallelität von Aufgaben ist entscheidend für Multicore Multicontroller, da sie die effiziente Nutzung mehrerer Kerne erlaubt und damit die parallele Ausführung von Aufgaben zur Verbesserung der Gesamtsystemleistung verbessert. Durch die parallele Ausführung von Aufgaben kann das System mehr Prozesse simultan handhaben, was zu geringeren Verzögerungen und höheren Reaktionszeiten für zeitabhängige Applikationen führt. Dazu leistet Parallelität auch bessere Unterstützung für das Ressourcenmanagement und stellt so sicher, dass Arbeitslasten gleichmäßig auf alle Kerne verteilt werden, sodass keine Engpässe auftreten und maximale Effizienz gewährleistet wird.
Nachfolgend sind einige Methoden vorgestellt, um Parallelität (oder Nebenläufigkeit) in Mehrkern-Mikrocontrollern zu nutzen:
Software-Optimierung ist zentral für Multicore Microcontroller, da sie sich direkt auf Leistung und Effizienz auswirkt. Durch richtig optimierten Code können unnötige Anleitungen wegfallen und Hardware-Betriebsmittel wie Speicher besser ausgenutzt werden, was sich in einer besseren parallelen Ausführung in allen Kernen und in spürbarer Mehrleistung von Mehrkernsystemen niederschlägt, die außerdem noch stromsparender im Betrieb sind.
Es gibt unter anderem folgende Softwareoptimierungsstrategien für Multicore Multicontroller:
Mehrkernprozessoren haben oft komplexe Cache-Hierarchien, so dass der effektive Umgang mit diesen Caches sich erheblich leistungssteigernd auswirken kann.
Moderne Multicore Microcontroller von Arm bieten oft Hardware-assistierte Mechanismen wie die folgenden, um eine effiziente Kommunikation und Synchronisierung zu garantieren:
Werden die obigen Methoden zur Softwareoptimierung für Multicore Microcontroller implementiert, sollte dies zu spürbaren Leistungssteigerungen und hoher Energieeffizienz führen. Allerdings kann die Implementierung von Code für Mehrkernsysteme, insbesondere in Embedded Systems, auch unbeabsichtigte Folgen haben. Daher muss der Code getestet und gemessen werden, um sicherzustellen, dass er effizient auf mehreren Kernen läuft.
Die Programmierung von Multicore Microcontrollern von ARM hält spezifische Herausforderungen bereit, bietet jedoch auch die Chance spürbarer Leistungsverbesserungen in Embedded Systems. Durch ein tieferes Verständnis der typischen ARM-Architektur, die sorgsame Ermittlung und Planung paralleler Aufgaben, die Übernahme effizienter Coding-Praktiken, die effektive Ausnutzung von Nebenläufigkeitseffekten sowie die Anwendung von Optimierungsstrategien können Entwickler die Fähigkeiten dieser leistungsstarken Mehrkerngeräte voll nutzen. Diese Übersicht kann nur ein erstes Fundament bilden, denn richtiges Programmieren von Multicore Arm Microcontrollern erfordert eingehendes Studium, praktische Erfahrung sowie laufenden Austausch mit den neuesten Technologien und Methodiken. ARM bietet eine einführende Anleitung für Programmierer sowie ein eingehenderes Training für optimale Programmierungsstrategien.