Python 3.13에 JIT 컴파일러 추가
- CPython 코어 개발자 Brandt Bucher가 Python 3.13 브랜치에 JIT 컴파일러를 추가하는 풀 리퀘스트를 제출함.
- 이 변경사항은 Python 3.11에 추가된 특수화 적응 인터프리터 이후 CPython 인터프리터에 가장 큰 변화 중 하나가 될 것임.
JIT란 무엇인가?
- JIT(Just in Time) 컴파일은 코드가 처음 실행될 때 컴파일이 이루어지는 설계를 의미함.
- JIT 컴파일러는 기계 코드를 생성하는 컴파일러를 말하며, AOT(Ahead of Time) 컴파일러와 대조됨.
- Python 코드는 먼저 바이트코드로 컴파일되며, 이 바이트코드는 CPU에게 아무 의미가 없고 특수한 바이트코드 인터프리터 루프를 통해 실행됨.
copy-and-patch JIT란 무엇인가?
- copy-and-patch JIT는 2021년에 제안된 개념으로, 동적 언어 런타임을 위한 빠른 알고리즘으로 설계됨.
- copy-and-patch JIT는 각 명령어에 대한 지시사항을 복사하고 바이트코드 인수를 채우는(패치하는) 아이디어임.
copy-and-patch JIT의 장단점
- "전체" JIT 컴파일러는 고수준 바이트코드를 중간 언어(IL)의 저수준 지시사항으로 컴파일하는 반면, copy-and-patch JIT는 바이트코드에서 기계 코드로 컴파일하는 것을 템플릿의 집합으로 수행함.
- copy-and-patch JIT는 복잡한 JIT 컴파일러 아키텍처를 Python 런타임 내에서 실행할 필요가 없으며, LLVM JIT 도구를 소스에서 CPython을 컴파일하는 기계에 설치하기만 하면 됨.
이 JIT는 어떻게 작동하는가?
- Python 3.13의 API에 새롭게 추가된 API를 확장하여 플러그 가능한 최적화기가 런타임에 발견될 수 있도록 함.
- 새로운 JIT는 이 새로운 아키텍처를 위한 선택적 최적화기임.
- 소스에서 CPython을 컴파일할 때
--enable-experimental-jit
플래그를 제공하면 Python 바이트코드에 대한 기계 코드 템플릿이 생성됨.
이 JIT가 더 빠른가?
- 초기 벤치마크는 약 2-9%의 성능 향상을 보여줌.
- 이 JIT는 Python의 성능을 크게 향상시킬 수 있는 일련의 최적화의 초석임.
GN⁺의 의견
- Python 3.13에 추가된 JIT 컴파일러는 Python 실행 속도를 향상시키는 중요한 변화로, 특히 반복적인 작업에 대한 효율성을 높일 수 있음.
- copy-and-patch JIT는 복잡한 JIT 아키텍처를 사용자의 Python 런타임에 통합할 필요 없이 성능을 향상시키는 혁신적인 접근법을 제공함.
- 이 기술은 Python 커뮤니티에게 흥미로운 논의를 제공하며, Python의 성능 최적화에 대한 새로운 문을 열 것으로 기대됨.