Python 3.15의 Windows x86-64 인터프리터가 약 15% 더 빨라질 전망

1 month ago 13

  • CPython의 테일 콜링(tail-calling) 인터프리터가 Windows x86-64 환경에서 기존 방식보다 약 15% 빠른 성능을 보임
  • macOS AArch64(XCode Clang)에서도 약 5%의 성능 향상이 확인되었으며, Windows에서는 MSVC 2026의 실험적 기능을 활용
  • pyperformance 벤치마크에서 대부분의 테스트가 속도 향상을 보였고, 일부는 최대 78%까지 개선
  • 성능 향상의 주요 원인은 컴파일러 최적화 히유리스틱 리셋과 인라이닝 개선으로 분석됨
  • Python 3.15 정식 릴리스 시, Visual Studio 2026 기반 빌드에서 기본 적용될 예정

테일 콜링 인터프리터의 성능 개선

  • CPython의 테일 콜링 인터프리터가 기존의 switch-case 인터프리터보다 Windows x86-64에서 약 15% 빠른 것으로 측정됨
    • pyperformance 기준, 지오메트릭 평균 15~16% 향상
    • 일부 벤치마크는 최대 78% 속도 향상, 소수의 경우 60% 느려짐
  • macOS AArch64(XCode Clang)에서는 약 5%의 성능 향상 확인
  • 이 결과는 Python 3.15 개발 주기 중 변경이 되지 않는다는 전제하에 유효

인터프리터 구조 비교

  • C 기반 인터프리터 구현 방식은 switch-case, computed goto, tail-call threaded 세 가지로 구분됨
    • switch-case: 명령어별 분기 처리
    • computed goto: GCC/Clang 확장 기능으로, 분기 주소로 직접 점프
    • tail-call threaded: 각 바이트코드 핸들러를 함수로 분리하고, 다음 함수로 테일 콜
  • 과거에는 C 컴파일러가 테일 콜 최적화를 보장하지 않아 스택 오버플로우 위험 존재
  • Clang의 __attribute__((musttail))과 MSVC의 [[msvc::musttail]] 속성으로 강제 테일 콜이 가능해짐

Windows용 MSVC 2026 빌드 결과

  • MSVC의 실험적 기능을 사용한 CPython 빌드에서 벤치마크 대부분이 속도 향상
    • 예시 결과:
      • spectralnorm: 1.48배
      • nbody: 1.35배
      • bm_django_template: 1.18배
      • xdsl: 1.14배
  • Python 3.15의 “What’s New” 문서에 공식 반영됨
    • Visual Studio 2026(MSVC 18) 빌드에서 테일 콜링 인터프리터 사용 가능
    • 순수 Python 라이브러리는 약 15%, 소규모 스크립트는 최대 40% 속도 향상

성능 향상의 원인

  • 테일 콜링은 컴파일러의 최적화 히유리스틱을 초기화하여 더 효율적인 코드 생성을 유도
  • 기존 CPython 인터프리터 루프는 약 12,000라인의 단일 함수로 구성되어 인라이닝 최적화 실패 빈번
    • 컴파일러가 코드 크기 증가를 피하기 위해 인라이닝을 거부하는 사례 다수
  • 테일 콜링 방식에서는 함수가 분리되어 단순 함수들이 인라인 처리 가능
    • 예시로 PyStackRef_CLOSE_SPECIALIZED 같은 간단한 함수가 인라인됨
  • PGO(프로파일 기반 최적화) 빌드에서도 동일한 현상 보고

빌드 및 사용 방법

  • 현재는 소스 빌드만 가능
    • Visual Studio 2026 환경에서 다음 명령으로 빌드 $env:PlatformToolset = "v145" ./PCbuild/build.bat --tail-call-interp -c Release -p x64 --pgo
  • 향후 Python 3.15 개발이 안정화되면 공식 바이너리 배포 예정

Read Entire Article