Beschleunigte Computer Vision mit SIMD auf dem ESP32-S3

Beschleunigte Computer Vision mit SIMD auf dem ESP32-S3

Der ESP32-S3-Mikrocontroller wurde mit dem neueren Cadence Xtensa LX7-Prozessorkern aufgerüstet, der eine Reihe von SIMD-Befehlen bietet, um verschiedenste Aufgaben signifikant zu beschleunigen. [Shranav Palakurthi] verwendete kürzlich diese Funktion, um die Verarbeitung von Videoframes zur Detektion von Ecken mithilfe der FAST-Methode zu beschleunigen. Durch die Umsetzung einiger Operationen, die von SIMD profitieren, in eine optimierte Version in LX7 ASM wurde die Durchsatzrate des Algorithmus um 220% gesteigert, von 5,1 MP/s auf 11,2 MP/s, allerdings mit einigen Einschränkungen.

Ein Problem der SIMD-Befehle im LX7 ist, dass sie schlecht dokumentiert sind – es sei denn, man unterzeichnet ein NDA mit Cadence – und viele nützliche Befehle fehlen. Für [Shranav] stellten der Mangel an Unterstützung für direkte unaligned Reads und der Vergleich von unsigned 8-Bit-Zahlen Hindernisse dar, die jedoch umgangen werden konnten, mit den Ergebnissen auf GitHub verfügbar.
Ein Großteil der Vorarbeit für diese SIMD-Implementierung wurde von [Larry Bank] geleistet, der die SIMD-Befehle aus verfügbaren Dokumentationen und Code-Beispielen reverse-engineered hat und festgestellt hat, dass der ESP32-S3 viele gängige SIMD-Befehle vermisst, einschließlich verschiedener Shifts und unaligned Reads und Writes. Dennoch ist es für viele Aufgaben ausreichend, solange man es schafft, mit den verfügbaren Befehlen zu arbeiten.