
ESP32-S3 마이크로컨트롤러용 SIMD 가속 FAST 특징점 검출기를 구현해 처리량을 테스트에서 약 220% 높였다는 사례가 공개됐다. 제작자는 QVGA(320×240) 프레임을 약 6ms에 처리했다고 밝혔으며, 결과는 해당 구현과 테스트 조건에 따른 것이다.
ESP32-S3는 최대 240MHz로 동작하는 듀얼 코어 CPU와 Wi-Fi·블루투스 저전력(Bluetooth Low Energy) 기능을 갖췄다. 제작자는 칩의 128비트 SIMD 명령어를 이용해 FAST 코너 검출의 사전 검사와 점수 계산 기능을 구현했다. 다만 점수 계산 구현의 자세한 내용은 글에서 다루지 않았다.
구현 과정에서는 ESP32-S3의 제약을 우회해야 했다. 명령어 집합이 정렬되지 않은 메모리 읽기를 직접 지원하지 않아 인접한 두 레지스터에서 필요한 픽셀 구간을 추출했다. 또 SIMD 비교 연산이 부호 있는 8비트 숫자만 지원하고 산술 연산은 포화 방식으로 동작해, 부호 없는 픽셀 값을 그대로 비교하거나 128을 빼기 어려웠다. 제작자는 값을 불러올 때 0x80과 XOR해 범위를 변환하는 방식으로 처리했다.
제작자가 측정한 FAST 검출기 처리량은 5.1MP/s에서 11.2MP/s로 늘었다. 글은 이 성능으로 ESP32-S3가 VGA 영상 초당 30프레임 처리를 할 수 있다고 설명한다. 원문에는 독립적인 검증 결과나 측정 환경에 대한 추가 정보는 제시되지 않았다.
부록: 원문 예시
.section .rodata
# read-only data here
.section .text
.align 4
.global add
.type add,@function
# a simple function that adds two numbers
# int32_t add(int32_t a, int32_t b)
add:
entry sp, 48 # sp (stack pointer) is an alias for a1
#define r_a a2
#define r_b a3
# code here
add a2, r_a, r_b # a2 = a + b
retw.n # return, with a2 containing the return value.
원문에 실린 예시 2
>>> np.int8(np.uint8(range(0, 256, 8)))
array([ 0, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80,
88, 96, 104, 112, 120, -128, -120, -112, -104, -96, -88,
-80, -72, -64, -56, -48, -40, -32, -24, -16, -8],
dtype=int8)
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요