V.E.L.O.C.I.T.Y.-OS: x86-64 머신... 노트

V.E.L.O.C.I.T.Y.-OS: x86-64 머신 코드 JIT 및 SCEV-Lite (파트 6)

저자는 CPU의 L3 캐시 내에서 완전히 실행되는 V.E.L.O.C.I.T.Y.-OS라는 고성능 운영 체제를 구축하고 있습니다. 스칼라 연산의 최대 속도를 달성하기 위해, 현재 추상 구문 트리(AST) 블록을 런타임에 직접 원시 x86-64 기계 명령어로 컴파일하고 있습니다. 이 접근 방식은 이전에는 비대규모 연산에서 병목 현상이었던 클로저 체인의 오버헤드를 우회합니다. 저자는 기본 스칼라 연산만 포함하는 블록을 식별하여 이 직접 컴파일을 트리거하기 위해 스칼라 검출기를 개발했습니다.JIT 컴파일러는 레지스터 할당 및 스택 프레이밍을 위한 세심하게 제작된 함수 프롤로그를 포함하여 실행 가능한 메모리 페이지에 기계 코드 바이트를 내보냅니다. 로컬 변수는 메모리 접근을 최소화하기 위해 CPU 레지스터 R12D부터 R15D까지 직접 매핑됩니다. 레지스터 로딩 및 저장 중 REX 접두사와 관련된 중요한 버그가 식별되고 수정되었습니다.또한, JIT 컴파일 중에 대수적 루프 해결을 수행하기 위해 SCEV-Lite라는 구성 요소가 구현되었습니다. 루프가 예측 가능한 산술 패턴을 따르는 경우, SCEV-Lite는 최종 값을 대수적으로 해결하여 잠재적으로 수백만 번의 루프 반복을 상수 시간의 다섯 개 명령 계산으로 변환합니다. 이는 루프 실행을 크게 가속화합니다.pre_register_variables라는 사전 패스가 도입되어 어셈블리 생성 전에 동적 루프 변수를 스택에 올바르게 매핑하여, 이러한 변수가 0으로 다시 쓰여지는 문제를 해결했습니다. 벤치마크 결과, 이 네이티브 JIT로 컴파일된 귀납 루프가 인터프리터에 비해 198,937배의 놀라운 속도 향상을 보였습니다. 이 최적화는 실행 계층을 축소하여 최신 CPU 마이크로코드의 2계층 아키텍처를 반영합니다.다음 단계에는 상수 폴딩, 전파, 루프 풀기 및 죽은 코드 제거와 같은 고전적인 컴파일러 최적화 패스를 구현하여 코드 생성을 더욱 개선하는 것이 포함됩니다.
CdXz5zHNQW_tO8Z2K7Tgj.webp