Présentation du ESP32‑S3 et du détecteur FAST
L’ESP32‑S3, vendu à environ 2 $, intègre un processeur dual‑core cadencé à 240 MHz et un jeu d’instructions SIMD de 128 bits. L’auteur a implémenté un détecteur de coins FAST, couramment utilisé en vision industrielle, pour analyser des images QVGA (320 × 240) en environ 6 ms. Cette version SIMD atteint 11,2 MP/s contre 5,1 MP/s pour l’implémentation de référence, soit une amélioration de 220 %.
Exploitation du SIMD 128 bits et contraintes ISA
Le jeu d’instructions SIMD de l’ESP32‑S3 ne propose que des opérations sur vecteurs de seize octets (8 bits). L’ISA ne supporte que les comparaisons signées, ce qui rend impossible l’utilisation directe de valeurs d’image non signées (0‑255). De plus, toutes les opérations arithmétiques SIMD sont saturantes : tout dépassement de 127 est limité à -128, empêchant un simple soustraction de 128.
.section .rodata
# read-only data here
.section .text
.align 4
.global add
.type add,@function
# int32_t add(int32_t a, int32_t b)
add:
entry sp, 48
#define r_a a2
#define r_b a3
add a2, r_a, r_b
retw.n
Astuce de contournement : alignement et conversion de valeurs
Le processeur ne permet pas les lectures désalignées. L’auteur a donc exploité l’instruction d’extraction de tranche, qui combine deux registres consécutifs et en extrait une sous‑partie, afin de récupérer les blocs est et ouest autour du pixel central. Pour la question du signe, il a converti chaque octet non signé en signé en appliquant un XOR avec 0x80 (1000 0000₂). Cette opération inverse le bit de poids fort, transformant la plage 0‑255 en -128‑127, ce qui rend les comparaisons signées correctes tout en contournant la saturation.
Performances obtenues et limites
Après ces deux adaptations – extraction de tranche pour l’alignement et XOR 0x80 pour le recadrage de signe – le détecteur FAST pré‑test SIMD traite 16 pixels en parallèle. Le débit mesuré passe de 5,1 MP/s à 11,2 MP/s, permettant le traitement en temps réel d’un flux VGA à 30 fps. L’implémentation reste toutefois dépendante de la capacité du microcontrôleur à charger les données en mémoire sans cache, et les opérations saturantes imposent des contraintes supplémentaires pour d’autres algorithmes de vision qui nécessitent des soustractions ou des multiplications non saturées.