TECH 으로 돌아가기
TECH HACKER NEWS 2026.10.27 16:10 7분 읽기 33 READS

2달러짜리 ESP32-S3로 영상 처리를? 컴파일러가 안 써주는 SIMD 직접 꺼내 쓰기

2달러짜리 칩으로 영상 처리를?

ESP32는 와이파이와 블루투스가 들어간 저렴한 마이크로컨트롤러(MCU)예요. IoT 기기나 메이커 프로젝트에 정말 많이 쓰이는 칩이죠. 그중 ESP32-S3는 대량으로 사면 개당 2달러 안팎인데요, 이 작은 칩에서 컴퓨터 비전, 그러니까 카메라 영상 분석을 빠르게 돌리는 방법을 다룬 글이 공개됐어요. 핵심 무기는 SIMD예요.

MCU로 영상 처리를 한다고 하면 보통 고개를 젓거든요. 클럭은 최대 240MHz이고 내장 SRAM은 512KB 정도라서, 픽셀을 하나씩 반복문으로 돌리다 보면 프레임이 금방 밀려요. 그런데 ESP32-S3 안에는 잘 알려지지 않은 비밀 병기가 하나 있어요.

SIMD가 뭐냐면

SIMD는 Single Instruction, Multiple Data의 줄임말이에요. 명령어 하나로 여러 데이터를 한꺼번에 처리하는 방식이죠. 마트 계산원이 물건을 하나씩 찍지 않고 바구니째 스캔한다고 생각하면 쉬워요.

ESP32-S3의 CPU(Xtensa LX7)에는 Espressif가 PIE(Processor Instruction Extensions)라고 부르는 확장 명령어가 들어 있어요. 128비트 벡터 레지스터 8개(q0~q7)를 쓰는데, 128비트면 8비트 값이 16개 들어가요. 흑백 이미지 픽셀은 보통 8비트니까 명령어 한 번으로 픽셀 16개를 동시에 더하거나 비교할 수 있어요.

이미지 밝기를 올리는 코드로 비교해 볼게요. 일반 C 코드는 픽셀을 하나씩 처리해요.

for (int i = 0; i < n; i++) {
int v = src[i] + 40;
dst[i] = v > 255 ? 255 : v; // 255를 넘으면 잘라내기
}

SIMD로 바꾸면 흐름이 이렇게 돼요. 개념만 보여주려고 부호 처리나 레지스터 초기화 같은 세부 사항은 뺀 예시예요.

loop:
ee.vld.128.ip q0, a2, 16 # 픽셀 16개 로드, 포인터 +16
ee.vadds.s8 q2, q0, q1 # 16개 동시 포화 덧셈
ee.vst.128.ip q2, a3, 16 # 픽셀 16개 저장, 포인터 +16

여기 나오는 포화 덧셈(saturating add)은 결과가 최댓값을 넘을 때 0으로 되돌아가지 않고 최댓값에서 딱 멈추는 연산이에요. C 코드에 있던 255 비교 분기를 하드웨어가 대신 처리해 주니까 분기 비용도 없어져요. Xtensa의 제로 오버헤드 루프(반복 횟수 체크를 하드웨어가 맡아 주는 기능)까지 쓰면 루프를 도는 비용도 거의 남지 않아요.

그런데 왜 다들 안 썼을까

이렇게 좋은 기능이 덜 알려진 건 컴파일러가 알아서 써주지 않기 때문이에요. PC용 GCC나 Clang은 반복문을 SIMD 코드로 바꿔 주는 자동 벡터화를 꽤 잘해요. 그런데 PIE는 Espressif만의 확장이라 일반 C 코드로는 쓸 수가 없어요. 결국 어셈블리를 직접 짜거나 ESP-DSP, ESP-DL 같은 공식 최적화 라이브러리를 써야 해요.

까다로운 조건도 있어요. 128비트 로드·스토어는 메모리 주소가 16바이트 단위로 정렬돼 있어야 하고, 정렬이 안 맞는 데이터는 별도 명령어로 앞뒤를 이어 붙여야 해요. 문서도 친절한 편이 아니라서 시행착오를 꽤 겪게 되죠. 이번 글이 반가운 것도 그래서예요. 실제 비전 처리 루프를 SIMD로 옮기는 과정을 따라가다 보면 이런 실전 감각이 생기거든요.

다른 선택지와 비교하면

ARM Cortex-M4/M7에도 32비트 레지스터 하나로 8비트 값 4개를 동시에 처리하는 DSP 명령어가 있어요. Cortex-M55/M85에는 Helium(MVE)이라는 128비트 벡터 확장이 있고요. OpenMV 같은 머신비전 보드는 STM32 계열 고성능 MCU로 이런 작업을 해 왔고, 요즘은 NPU(신경망 전용 가속기)를 넣은 MCU도 늘고 있어요.

NPU는 딥러닝 추론에는 강하지만 정해진 연산에서만 빨라요. SIMD는 범용이라 이진화, 엣지 검출, 블롭 추적 같은 고전 영상 처리에도 그대로 쓸 수 있어요. 게다가 ESP32-S3의 진짜 강점은 가격과 무선 통신이에요. 칩 하나로 카메라 입력, 영상 분석, 와이파이 전송까지 다 해결되거든요.

한국 개발자에게 주는 시사점

스마트팩토리의 부품 유무 체크, 스마트팜 생육 모니터링, 매장 출입 카운터처럼 이 정도 성능이면 충분한 비전 작업은 생각보다 많아요. 이런 걸 라즈베리파이나 클라우드로 보내지 않고 MCU에서 끝내면 부품 단가와 전력이 크게 줄어요. 영상 대신 결과값만 내보내니까 개인정보 부담도 덜하고요.

SIMD 사고방식은 MCU에서만 쓰는 지식도 아니에요. 서버의 AVX나 스마트폰의 NEON도 원리가 같거든요. 데이터를 어떻게 정렬하고 어떻게 묶어서 한 번에 처리할지 고민해 본 경험은 백엔드 성능을 최적화할 때도 그대로 쓸모가 있어요.

마무리

한 줄 정리: 컴파일러가 안 써주는 SIMD를 직접 꺼내 쓰면 2달러짜리 칩도 꽤 쓸 만한 비전 프로세서가 돼요.

MCU에서 영상 처리를 해 보신 분 계신가요? 성능을 위해 어셈블리까지 내려가는 게 요즘에도 가치 있는 투자일까요, 아니면 NPU 달린 칩을 고르는 게 더 현명할까요?


🔗 출처: Hacker News

SOURCE · HACKER NEWS
원문 전체 보기 → https://shraiwi.com/blog/simd-fast-esp32s3/
SHARE
NEXT · CHOOSE

변화를 읽었다면,
내가 만들 수익 구조를 고릅니다.

정보를 더 모으는 데서 멈추지 않고, 광고·외주·판매·중개·구독 중 내 상황에 맞는 출발점을 정해보세요.

21가지 수익 구조 살펴보기 →
처리 중...