Neue Mikroarchitektur für Cortex-M

KI auf Mikrocontrollern mit Armv8.1-M und Helium

14. Februar 2019, 15:00 Uhr | Joseph Yiu, Senior Principal Engineer bei Arm, und Frank Riemenschneider
Diesen Artikel anhören

Fortsetzung des Artikels von Teil 1

Helium-Funktionen

Helium unterstützt die bedingte Ausführung für jede der Lanes im Vektor. Dieser Optimierungsmechanismus wird als Lane-Prädiktion bezeichnet. Um diese Funktion zu aktivieren, wurde ein neues Spezialregister namens Vector Predication Status and Control Register (VPR) hinzugefügt, um die Bedingung für jede Lane zu speichern. Diese Prädiktionsbedingung in diesem Register wird durch Vektoroperationen wie Vector Compare (VCMP) aktualisiert. Nach dem Einrichten der Bedingungsmerker können VPT (Vector Predicate Then) / VPST (Vector Predicate Set Then) Anweisungen und dann die bedingte Ausführung jeder Lane in Folgevektorbefehlen einrichten (bis zu vier Anweisungen im Vektorprädikationsblock, ähnlich dem Befehlsblock IF-THEN).

Der Status des VPR wird gespeichert und bei Ausnahmeereignissen (Exceptions) automatisch wiederhergestellt, indem ein reserviertes Wort innerhalb des erweiterten Exception-Stack-Frames verwendet wird.

Um das Beste aus den 128-bit-Vektorregistern herauszuholen, wurden mit Armv8.1-M auch Big-Integer-Verarbeitungsanweisungen (VADC, VSBC und VSHLC) eingeführt, die so verkettet werden können, dass sie mit ganzzahligen Datentypen von 128 Bit oder mehr arbeiten.

Low-Overhead-Branch-Extension

Um eine effiziente Signalverarbeitung zu ermöglichen, führt Armv8.1-M Low-Overhead-Schleifen und zusätzliche Verzweigungsanweisungen ein. Eine einfache While-Schleifenstruktur beginnt mit einer WLS-Anweisung (while-loop-start), die die Schleifenanzahl und die Verzweigungsrücksprungadresse angibt, und die Schleifenstruktur endet mit einer LE-Anweisung (loop-end). Bild 2 zeigt die Umsetzung entsprechenden C-Codes.

arm
Bild 3: Der Softwareentwickler hat Debug-Zugriff auf alle nicht sichere Software und die Bibliothek X, die nicht privilegiert ist.
© arm

Beim ersten Ausführen der Schleife werden sowohl WLS- als auch LE-Befehle ausgeführt, und die Schleifenadressen werden im Prozessor zwischengespeichert. Nachfolgende Schleifeniterationen müssen diese beiden Anweisungen nicht erneut ausführen. Die Schleifenzählung wird über das Linkregister (LR/r14) und das Schleifenende abgewickelt, wenn der Schleifenzähler Null erreicht.

Wenn während der Low-Overhead-Schleife ein Interrupt aufgetreten ist, wird der Loop-Adress-Cache gelöscht und der LE-Befehl nach der Rückkehr aus der Interrupt-Serviceroutine (ISR) erneut ausgeführt.

Neben while-loop-start (WLS) gibt es auch eine Do-loop-start-Anweisung (DLS), die ähnlich ist. Die Do-Schleife führt immer die erste Iteration des Schleifenkörpers aus, während die While-Schleife vor der ersten Iteration zum Ende der Schleife springt, wenn die Bedingung nicht erfüllt ist.

Es gibt eine Variante von Low-Overhead-Schleifenbefehlen (WLSTP und DLSTP), die eine Schleifenschlussvorhersage ermöglicht. Wenn eine Datenverarbeitungsaufgabe an N Elementen durchgeführt werden muss, bei der N kein Vielfaches der Vektor-Lanebreite ist (zum Beispiel wenn die zu verarbeitenden Elemente 32-bit sind, kann MVE Elemente in vier Lanes pro Vektorbefehl verarbeiten), dann ermöglicht die Schleifenschlussvorhersage der letzten Schleifeniteration, nur die restlichen Elemente mit einem bedingten Ausführungsmechanismus zu verarbeiten. Bei der Verwendung von WLSTP/DLSTP muss LETP (Loop-end with Tail Predication) verwendet werden, um das Ende der Schleife anzuzeigen. Ein Suffix (.8/.16/.32) wird für WLSTP und DLSTP benötigt, um die Größe der zu verarbeitenden Vektorelemente anzugeben, und der Wert in der LR enthält die Anzahl der zu verarbeitenden Elemente und nicht die Anzahl der Schleifen.

Eine zusätzliche Anweisung namens LCTP (Loop clear with tail predication) ermöglicht es, die Low-Overhead-Schleife mit Tail Predication bei Bedarf vorzeitig zu beenden.

WLS, DLS, LE Anweisungen sind unabhängig davon, ob MVE implementiert ist, verfügbar. Die Anweisungen zur Vorhersage des Schleifenendes (WLSTP, DLSTP, LETP) erfordern die Implementierung von MVE. Es gibt in der Armv8.1-M-Architektur zusätzliche Verzweigungsoptionen, welche die Vorteile der durch die Low-Overhead-Schleife eingeführten Hardware nutzen, um einen höheren Durchsatz bei Verzweigungen zu ermöglichen.

Mit Armv8.1-M wurden auch eine Reihe neuer bedingter Ausführungsanweisungen eingeführt (Tabelle 1). Dazu kommen bei implementierten MVE arithmetische und logische Schiebebefehle (ASRL, LSLL, LSRL zuzüglich Varianten für Rundungen/Sättigungen) für 64-bit-Daten, vorzeichenbehaftete und nicht vorzeichenbehaftete Rundungs-/Sättigungs-Schiebeanweisungen für 32-bit- und 64-bit-Daten.

arm
Bild 4: Prozessor-Daten-Cache mit ECC-Speichersystem. Ein nicht korrigierbarer Doppelbitfehler ist aufgetreten.
© arm

  1. KI auf Mikrocontrollern mit Armv8.1-M und Helium
  2. Helium-Funktionen
  3. Verbesserungen bei der Gleitkomma-Verarbeitung
  4. Performance-Monitoring-Einheit (PMU)
  5. Migration der Software auf Armv8.1-M und Fazit

Lesen Sie mehr zum Thema


Das könnte Sie auch interessieren

Jetzt kostenfreie Newsletter bestellen!

Weitere Artikel zu ARM Germany GmbH

Weitere Artikel zu Mikrocontroller