TECH 으로 돌아가기
TECH HACKER NEWS 오늘 2분 읽기 26 READS

게임보이 명령어를 WASM으로 JIT 컴파일했더니 네이티브 인터프리터를 이겼다

에뮬레이터는 보통 '명령어를 하나씩 읽고 해석해 실행'하는 인터프리터 방식으로 만듭니다. 직관적이지만, 매 명령어마다 분기·디스패치 오버헤드와 분기 예측 실패가 쌓여 성능이 깎이죠. WATaBoy는 발상을 뒤집습니다. 게임보이 CPU(Sharp LR35902) 명령어를 실행 시점에 WebAssembly 코드로 번역(JIT 컴파일)한 뒤, WASM 런타임의 최적화 컴파일러에게 실행을 맡깁니다.

놀라운 결과는 이렇게 만든 WASM JIT가 C로 짠 네이티브 인터프리터보다 빨랐다는 점입니다. 비결은 핫루프를 기본 블록 단위로 묶어 한 번 번역하면 인터프리터의 해석 비용이 통째로 사라지고, V8 같은 성숙한 WASM 엔진이 그 코드를 다시 기계어로 최적화해주기 때문입니다. 즉 직접 어셈블리를 짜지 않고도 산업급 컴파일러의 최적화를 공짜로 빌려오는 셈이죠.

핵심 교훈은 '인터프리터의 단순함 대신 번역의 한 번 비용을 치르면, 반복 실행에서 크게 이득을 본다'는 고전적 JIT 원리가 WASM 시대에 더 손쉽게 실현된다는 것입니다. 브라우저에서 돌아가는 코드가 네이티브를 넘어서는 흥미로운 사례입니다.

SOURCE · HACKER NEWS
원문 전체 보기 → https://humphri.es/blog/WATaBoy/
SHARE
처리 중...