tracemonkey.pdf
job 3662ff519e48 · done_with_warnings
· openai_compat / gpt-5.6-sol
· 다운로드
진행
1
2
3
4
5
6
7
8
9
10
11
12
13
14
문서 요약
이 논문은 JavaScript와 같은 동적 언어를 효율적으로 실행하기 위한 트레이스 기반 적시 타입 특수화 기법을 제시한다. 실행 중 빈번하게 수행되는 루프 경로와 실제 값의 타입을 기록하고, 가드가 포함된 타입 특수화 네이티브 코드로 컴파일하여 일반적인 타입 디스패치 비용을 줄인다. 또한 중첩 루프를 각각의 트레이스 트리로 구성하고 외부 트리가 내부 트리를 호출하게 함으로써 과도한 꼬리 복제와 코드 캐시 증가를 방지한다. 이 기법을 SpiderMonkey에 구현한 TraceMonkey는 추적 가능한 프로그램에서 대체로 2배에서 20배의 성능 향상을 보였으며, 일부 정수 연산 중심 벤치마크에서는 25배가 넘는 향상을 달성한다. 다만 재귀 호출, eval, 일부 정규식 및 외부 함수 호출을 추적하지 못하는 한계가 있으며, 기록 및 컴파일 비용을 줄이는 작업이 향후 과제로 제시된다.
용어집 (38)
| activation record | 활성화 레코드 |
| blacklisting | 블랙리스트 지정 |
| boxed value | 박싱 값 |
| branch trace | 분기 트레이스 |
| bytecode interpreter | 바이트코드 인터프리터 |
| call threading | 호출 스레딩 |
| common subexpression elimination | 공통 부분식 제거 |
| constant folding | 상수 폴딩 |
| dead code elimination | 죽은 코드 제거 |
| dynamic language | 동적 언어 |
| function inlining | 함수 인라이닝 |
| guard instruction | 가드 명령어 |
| hot loop | 핫 루프 |
| inline threading | 인라인 스레딩 |
| intermediate representation | 중간 표현 |
| just-in-time compilation | 적시 컴파일 |
| loop trace | 루프 트레이스 |
| native code | 네이티브 코드 |
| nested trace tree | 중첩 트레이스 트리 |
| object shape | 객체 형태 |
| region-based compilation | 영역 기반 컴파일 |
| register allocation | 레지스터 할당 |
| register spilling | 레지스터 스필 |
| root trace | 루트 트레이스 |
| side exit | 사이드 엑시트 |
| static type information | 정적 타입 정보 |
| tail duplication | 꼬리 복제 |
| trace | 트레이스 |
| trace cache | 트레이스 캐시 |
| trace monitor | 트레이스 모니터 |
| trace recorder | 트레이스 기록기 |
| trace stitching | 트레이스 연결 |
| trace tree | 트레이스 트리 |
| trunk trace | 주 트레이스 |
| type map | 타입 맵 |
| type specialization | 타입 특수화 |
| type stability | 타입 안정성 |
| unboxed value | 언박싱 값 |
지표
| deferred_ratio | 0.6426 |
| fallback_pages | 1.0 |
| pixel_max_diff | 5.0 |
| size_ratio | 1.1472 |
| missing_glyphs | 1.0 |
| translated_ratio | 1.0 |
| failed_segments | 0.0 |
| llm_null_ratio | 0.0641 |
| placeholder_ratio | 1.0 |
| number_ratio | 1.0 |
| glossary_consistency | 0.9973 |
경고 (1)
- page 2: 검증 실패 → 원본 페이지로 폴백: KO-TEXT(block 16: 추출 'i d l k f k i d i i i d l k f ' ≠ 계획 '그 결과로 얻은 트레이스 VM을 TraceMonkey라')