피드로 돌아가기
Hacker NewsHacker News
Infrastructure

Wasm JIT 도입으로 Native Interpreter 대비 성능 우위 달성

WATaBoy: JIT-Ing Game Boy Instructions to WASM Beats a Native Interpreter

2026년 6월 29일14advanced

Context

iOS 환경의 JIT 컴파일 제한으로 인해 CPU-bound 에뮬레이터 구동에 제약 발생. 기존 Native Interpreter 방식은 fetch-decode-execute 루프의 오버헤드로 인해 고성능 구현에 한계가 있음.

Technical Solution

  • 웹 브라우저의 WebAssembly JIT 컴파일러를 활용한 JIT-to-Wasm 구조 설계
  • SM83 명령어를 Wasm bytecode로 변환하여 브라우저가 Native Machine Code로 최적화하도록 유도
  • Interrupt 발생 시점을 예측하고 JIT block 진입 및 Interpreter Fallback을 교차 수행하는 하이브리드 제어 로직 적용
  • MMIO 접근 등 Non-CPU 컴포넌트의 Lazy Evaluation을 통한 사이클 정확도(Cycle-accuracy) 유지
  • C ABI 기반의 Pointer 및 Buffer Length 전달 방식을 통해 Rust-JS 간 통신 오버헤드 최소화
  • wasm-encoder 라이브러리를 활용한 런타임 Wasm Module 생성 및 Late-linking 구현

- OS 레벨의 JIT 제한 상황에서 WebAssembly Runtime을 우회 경로로 검토 - CPU 집약적 작업 시 단순 인터프리터보다 Basic-block 단위의 JIT 컴파일러 도입 고려 - 성능 최적화를 위해 고수준 Glue Code(wasm-bindgen 등) 대신 Low-level C ABI 데이터 전달 방식 검토

원문 읽기