피드로 돌아가기
Dev.toBackend
원문 읽기
AssemblyScript 기반 JSON 직렬화기가 SWAR 기법으로 8바이트 블록 단위의 이스케이프 문자 감지를 구현하여 Wasm 환경에서 최대 6355MB/s 처리량을 달성했다
Quickly detecting JSON Escapes with SWAR
AI 요약
Context
JSON 문자열 직렬화 시 따옴표, 백슬래시, 제어문자, 비ASCII 문자를 개별적으로 검사하는 순진한 루프가 핫패스에서 문자당 1개의 분기를 발생시킨다.
Technical Solution
- UTF-16 문자 4개(8바이트)를 하나의 u64 레지스터에 패킹하고 저바이트와 고바이트를 분리하여 동시 검사한다.
- 저바이트 검사: 뺄셈과 XOR 연산을 통해 따옴표, 백슬래시, 제어문자 범위 위반 신호를 생성하고 마스킹한다.
- 고바이트 검사: 각 UTF-16 라인의 고바이트가 0이 아닌 경우를 감지하여 순수 ASCII 경로 이탈 여부를 판별한다.
- Safe 변이: 추가적인 고바이트 증명 로직을 포함하여 위양성(false positive)을 최소화한다.
- Unsafe 변이: 고바이트 증명을 건너뛰고 후속 슬로우 경로에 위양성 처리를 위임하여 핫패스 부담을 줄인다.
Impact
Wasm 환경에서 Plain ASCII 텍스트 처리 시 safe 대비 unsafe가 26% 높은 처리량(5030→6355MB/s)을 보였다. Native C 컴파일 시에도 동일한 경향이 확인되었다.
Key Takeaway
일반적인 ASCII 데이터는 비싼 연산을 회피하고 블록 단위로 흥미로운 대상 유무만 확인하는 설계가 핫패스 성능을 크게 향상시킨다.
실천 포인트
AssemblyScript로 작성된 JSON 직렬화기에서 UTF-16 데이터에 SWAR 패턴 매칭을 u64 레지스터 연산 기반으로 적용 시 비ASCII 위주 워크로드에서 핫패스 분기 비용을 제거하면서 최대 26% 처리량 향상을 달성한다