Visão computacional com SIMD roda em microcontrolador ESP32-S3 de US$ 2
Aprofundamento CEVIU
Aprofundamento
O autor escreveu um detector de features FAST para o ESP32-S3 que usa as instruções SIMD de 128 bits do chip. Cada registrador vetorial guarda dezesseis valores de 8 bits, então o pré-teste de cantos conta pixels "extremos" (diferença absoluta para o pixel central acima de um limiar) em blocos de dezesseis pixels. Segundo o texto, o ganho foi de cerca de 220% de vazão, de 5,1 MP/s para 11,2 MP/s, com aproximadamente 6 ms por frame QVGA (320x240). Isso bastaria para processar um stream VGA a 30 fps.
O interessante está nas limitações da ISA. Primeiro, não há leitura desalinhada direta. Para os blocos leste e oeste, o autor lê os dois blocos vizinhos ao central e extrai uma fatia dos dois registradores concatenados. Segundo, as comparações só existem para inteiros de 8 bits com sinal, e os pixels são sem sinal. Reinterpretar os dados bagunça a ordem dos valores acima de 127. Como as operações aritméticas SIMD do chip são saturantes, subtrair 128 não funciona. A saída é um XOR com 0x80, já que x, 128 == x ^ 0x80, o que desloca o intervalo de [0, 255] para [-128, 127] de forma linear. Pelo relato, o projeto também rendeu o basm, um alocador de registradores próprio do autor. Como referências de código SIMD no ESP32-S3, ele cita o blog de Larry Bank e as bibliotecas esp-dsp e esp-dl, da Espressif.
Por que isso importa
Para quem desenvolve embarcado, a leitura é prática: o hardware barato muitas vezes tem desempenho sobrando, só que escondido atrás de uma ISA cheia de arestas. Truques de aritmética de bits como esse valem em qualquer lugar onde a comparação ou a saturação atrapalhem. E mostra que pré-processamento de visão em tempo real cabe num chip de US$ 2.
Linha do tempo
CEVIU noticia LLM de 28.9M de parâmetros rodando em um ESP32-S3.
CEVIU noticia recurso oculto nos chips ESP32 que permite rádio definido por software.
Detector FAST com SIMD no ESP32-S3 chega a cerca de 6 ms por frame QVGA.
Perguntas frequentes
O que é o detector FAST?
É um detector de cantos (features) usado em visão computacional. O pré-teste amostra um pixel em cada direção cardinal e verifica se pelo menos três são extremos, isto é, diferem do pixel central acima de um limiar.
Qual o desempenho obtido no ESP32-S3?
Cerca de 6 ms por frame QVGA (320x240). A vazão subiu de 5,1 MP/s para 11,2 MP/s, melhora de aproximadamente 220%, segundo os testes do autor. Isso permite processar um stream VGA a 30 fps.
Por que usar XOR com 0x80?
As comparações SIMD do chip só aceitam valores de 8 bits com sinal, e a subtração é saturante. Inverter o bit mais significativo equivale a subtrair 128 e leva os pixels de [0, 255] para [-128, 127], mantendo a ordem.
Como o autor resolveu as leituras desalinhadas?
A ISA não permite leitura desalinhada direta. Ele usou uma instrução que extrai uma fatia de dois registradores concatenados, lendo os blocos adjacentes ao central para montar os blocos leste e oeste.
Fontes
- shraiwi.comfonte original
- Categoria
- CEVIU Web Dev
- Publicado
- 27 de outubro de 2026
- Editoria
- CEVIU Web Dev
