programing

파이썬 3 인터프리터에 JIT 기능이 있습니까?

jooyons 2023. 5. 5. 09:39
반응형

파이썬 3 인터프리터에 JIT 기능이 있습니까?

제가 파이썬에 더 많은 것을 요청할 때 파이썬은 제 기계 자원을 100% 사용하지 않고, 정말 빠르지도 않고, 다른 많은 해석 언어와 비교하면 빠르지만, 컴파일된 언어와 비교했을 때, 저는 그 차이가 정말 놀랍다고 생각합니다.

파이썬 3에서 JIT(Just In Time) 컴파일러로 속도를 높일 수 있습니까?

일반적으로 JIT 컴파일러는 통역된 언어의 성능을 향상시킬 수 있는 유일한 컴파일러이기 때문에 다른 솔루션이 있다면 새로운 답변을 받아들이고 싶습니다.

먼저, Python 3(.x)는 여러 구현이 가능한 언어입니다.자, 현재까지 CPython을 제외한 어떤 구현도 실제로 언어의 버전을 구현하지 않습니다.하지만 그것은 바뀔 것입니다 (PyPy가 따라잡고 있습니다).

당신이 묻고자 했던 질문에 답하자면, CPython, 3.x 또는 그 밖의 방법은 JIT 컴파일러를 포함하지 않으며, 포함하지도 않으며, 포함하지 않을 가능성도 있습니다.일부 다른 Python 구현(PyPy는 기본적으로 가상 머신에 JIT 컴파일러를 재사용하여 Jython 및 IronPython)에는 JIT 컴파일러가 있습니다.그리고 Python 3 지원을 추가할 때 JIT 컴파일러가 작동을 멈출 이유가 없습니다.

하지만 제가 여기 있는 동안 잘못된 생각을 말씀드리겠습니다.

일반적으로 JIT 컴파일러는 해석된 언어의 성능을 향상시킬 수 있는 유일한 것입니다.

이것은 정확하지 않습니다.JIT 컴파일러는 가장 기본적인 형태로 인터프리터 오버헤드를 제거할 뿐이며, 이는 대부분의 경우는 아니지만 일부 느린 속도를 설명합니다.또한 우수한 JIT 컴파일러는 동적 타이핑, 다형성 및 다양한 자기성찰 기능과 같은 두드러진 예를 들어, 일반적으로 (더 효율적인 구현을 허용하는 특별한 경우를 감지하여) 수많은 파이썬 기능을 구현하는 데 필요한 오버헤드를 제거하는 호스트 최적화를 수행합니다.

컴파일러를 구현하는 것만으로는 도움이 되지 않습니다.매우 영리한 최적화가 필요하며, 대부분은 매우 특정한 상황과 제한된 시간 동안만 유효합니다.JIT 컴파일러는 런타임에 특수 코드를 생성할 수 있고(전체 포인트), 실행 중인 프로그램을 관찰하여 더 쉽게(그리고 더 정확하게) 분석할 수 있으며, 유효하지 않을 때 최적화를 실행 취소할 수 있기 때문에 여기서 쉽게 사용할 수 있습니다.그들은 또한 이전의 컴파일러와는 달리 통역사와 상호 작용할 수 있으며, 그것은 합리적인 설계 결정이기 때문에 종종 그렇게 합니다.저는 이것이 그들이 독립적으로 존재할 수 있고 존재할 수 있지만, 사람들의 마음 속에서 통역사와 연결되어 있는 이유라고 생각합니다.

인터프리터의 코드 자체를 최적화하는 것 외에도, 예를 들어 HotPy(2) 프로젝트와 같은 Python 구현을 더 빠르게 하는 다른 접근 방식도 있습니다.그러나 그것들은 현재 연구 또는 실험 단계에 있으며, 실제 코드에 대한 효과(및 성숙도)를 아직 보여주지 못하고 있습니다.

그리고 물론 특정 프로그램의 성능은 언어 구현보다 프로그램 자체에 훨씬 더 많이 의존합니다.언어 구현은 일련의 작업을 얼마나 빨리 수행할 수 있는지에 대한 상한만 설정합니다.일반적으로 불필요한 작업, 즉 프로그램 최적화를 통해 프로그램의 성능을 훨씬 더 향상시킬 수 있습니다.이것은 당신이 인터프리터, JIT 컴파일러 또는 선행 컴파일러를 통해 프로그램을 실행하든 상관없이 사실입니다.빠른 언어 구현을 원하는 경우에는 일부러 빠른 언어 구현을 시도하지 마십시오.해석과 동적인 오버헤드로 실현 불가능한 응용 프로그램이 있지만, 생각만큼 흔하지는 않습니다(그리고 종종 기계 코드로 컴파일된 코드를 선택적으로 호출하여 해결함).

JIT가 있는 유일한 Python 구현체는 PyPy입니다.Byt - PyPy는 Python 2 구현과 Python 3 구현 모두입니다.

Numba 프로젝트는 Python 3에서 작동해야 합니다.질문하신 내용이 정확하지는 않지만, https://github.com/numba/numba/blob/master/docs/source/doc/userguide.rst 에서 한 번 시도해 보는 것이 좋습니다.

현재 일부 Python 구문을 지원하지 않습니다.

당신파이썬과 다소 호환되는 pypypy3 브랜치를 시도할 수 있지만 공식 CPython 구현에는 JIT가 없습니다.

이것은 이 사이트의 몇몇 주목할 만한 파이썬 개발자들에 의해 가장 잘 대답될 것입니다.

그래도 저는 논평하고 싶습니다.통역되는 언어의 속도에 대해 논의할 때 다음 위치에서 호스팅되는 프로젝트를 소개하고 싶습니다. 컴퓨터 언어 벤치마크 게임

이 사이트는 벤치마크 운영을 전담하는 사이트입니다.지정된 작업이 있습니다.누구나 원하는 언어로 솔루션을 제출한 후 테스트를 통해 각 솔루션의 런타임을 비교할 수 있습니다.솔루션은 동료 검토가 가능하고, 다른 솔루션이 추가로 개선하는 경우가 많으며, 결과는 사양과 비교하여 확인됩니다.장기적으로 이것은 다른 언어를 비교하는 가장 공정한 벤치마킹 시스템입니다.

이와 같은 요약을 통해 알 수 있듯이 컴파일된 언어는 해석된 언어에 비해 상당히 빠릅니다.그러나 정확한 컴파일 유형에서는 차이가 크지 않을 수 있습니다. Python(및 Python보다 느린 그래프의 다른 구성 요소)은 완전히 동적이라는 사실입니다.객체는 즉시 수정할 수 있습니다.유형은 즉시 수정할 수 있습니다.따라서 일부 유형 검사는 컴파일 시간 대신 런타임으로 연기해야 합니다.

따라서 컴파일러의 이점에 대해 논의할 수 있지만 언어마다 다른 기능이 있다는 점을 고려해야 합니다.그리고 이러한 기능들은 본질적인 가격에 제공될 수 있습니다.

마지막으로, 속도에 대해 언급할 때:대부분의 경우 문제를 일으키는 것은 언어와 지각된 느림 때문이 아니라 잘못된 알고리즘입니다.하나가 너무 느려서 언어를 바꿀 필요가 없었습니다.코드에 속도 문제가 있을 때 알고리즘을 수정합니다.그러나 코드에 시간이 많이 걸리고 계산 집약적인 루프가 있는 경우에는 일반적으로 이러한 루프를 다시 컴파일할 가치가 있습니다.대표적인 예는 스크립트 언어에 의해 사용되는 C로 코드화된 라이브러리입니다(Perl XS libs 또는 Python용 numpy/scipy, lapack/blas는 많은 스크립트 언어에 대한 바인딩과 함께 사용 가능한 libs의 예입니다).

JIT를 Justin time 컴파일러에서 Bytecode 표현으로 의미한다면 2.2 이후의 JIT는 이러한 기능을 가지고 있습니다.기계 코드에 대한 JIT를 의미한다면, 아니요.그러나 바이트 코드로 컴파일하면 성능이 크게 향상됩니다.만약 당신이 그것을 기계 코드로 컴파일하기를 원한다면, Pypy는 당신이 찾고 있는 구현체입니다.

참고: Pypy는 Python 3.x에서 작동하지 않습니다.

만약 당신이 코드 블록에서 속도 개선을 찾고 있다면, 당신은 피피를 사용하여 C로 컴파일하는 피피토닉을 보고 싶을 것입니다.파이썬용 JIT로 변환하는 데코레이터를 사용합니다.

언급URL : https://stackoverflow.com/questions/13034991/does-the-python-3-interpreter-have-a-jit-feature

반응형