Python 3 인터프리터에 JIT 기능이 있습니까?
파이썬에게 더 많은 것을 물어 보면 파이썬은 내 기계 리소스를 100 % 사용하지 않고 실제로 빠르지 않고 다른 많은 해석 언어와 비교하면 빠르지 만 컴파일 된 언어와 비교할 때 차이점은 다음과 같다고 생각합니다. 정말 놀랍습니다.
Python 3에서 JIT (Just In Time) 컴파일러로 속도를 높일 수 있습니까?
일반적으로 JIT 컴파일러는 통역 언어의 성능을 향상시킬 수있는 유일한 방법이므로 다른 솔루션을 사용할 수 있다면 새로운 답변을 받아들이고 싶습니다.
먼저 Python 3 (.x)는 여러 구현이 가능한 언어입니다. 좋아, 오늘날까지 CPython을 제외한 어떤 구현도 실제로 이러한 버전의 언어를 구현하지 않습니다. 그러나 그것은 바뀔 것입니다 (PyPy가 따라 잡고 있습니다).
질문하고자하는 질문에 답하기 위해 CPython, 3.x 또는 기타는 JIT 컴파일러를 포함하지 않았고, 포함하지 않았으며, 포함하지도 않을 것입니다. 일부 다른 Python 구현 (기본적으로 PyPy, 빌드하는 가상 머신에 JIT 컴파일러를 재사용하는 Jython 및 IronPython)에는 JIT 컴파일러가 있습니다. 그리고 파이썬 3 지원을 추가 할 때 JIT 컴파일러가 작동을 멈출 이유가 없습니다.
하지만 여기에있는 동안 오해에 대해서도 설명하겠습니다.
일반적으로 JIT 컴파일러는 해석 언어의 성능을 향상시킬 수있는 유일한 방법입니다.
이것은 올바르지 않습니다. 가장 기본적인 형태의 JIT 컴파일러는 단순히 인터프리터 오버 헤드를 제거하는데, 이는 여러분이 보는 속도 저하의 일부를 설명하지만 대다수는 아닙니다. 좋은의 JIT 컴파일러는 동적 타이핑, 다형성, 다양한 내성적 특징 인 (보다 효과적인 구현을 허용하는 특별한 경우를 검출함으로써) 파이썬 일반적인 특징 수많은 구현하는 데 필요한 오버 헤드를 제거 최적화, 현저한 예는 호스트가 행한다.
컴파일러를 구현 하는 것만으로 는 도움이되지 않습니다. 매우 영리한 최적화가 필요합니다. 대부분은 매우 특정한 상황에서 제한된 시간 동안 만 유효합니다. JIT 컴파일러는 런타임에 특수 코드를 생성 할 수 있고 (전체 요점) 프로그램이 실행되는 동안 관찰하여 프로그램을 더 쉽고 (더 정확하게) 분석 할 수 있으며, 최적화가 무효화되면 실행 취소 할 수 있기 때문에 여기서 쉽습니다. 또한 사전 컴파일러와 달리 인터프리터와 상호 작용할 수 있으며 이는 합리적인 설계 결정이기 때문에 종종 수행합니다. 나는 이것이 그들이 독립적으로 존재할 수 있고 존재할 수 있지만 사람들의 마음 속에서 통역사와 연결되는 이유라고 생각합니다.
인터프리터의 코드 자체를 최적화하는 것 외에 Python 구현을 더 빠르게 만드는 다른 접근 방식도 있습니다 (예 : HotPy (2) 프로젝트). 그러나 이들은 현재 연구 또는 실험 단계에 있으며 실제 코드에 대한 효과 (및 성숙도)를 아직 보여주지 못했습니다.
물론 특정 프로그램의 성능은 언어 구현보다 프로그램 자체에 훨씬 더 많이 의존합니다. 언어 구현은 일련의 작업을 수행 할 수있는 속도에 대한 상한 만 설정합니다. 일반적으로 불필요한 작업, 즉 프로그램을 최적화하는 것만으로도 프로그램의 성능을 훨씬 더 향상시킬 수 있습니다. 이것은 인터프리터, 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 구문을 지원하지는 않습니다.
파이썬과 어느 정도 호환 되는 pypy py3 브랜치를 사용해 볼 수 있지만 공식 CPython 구현에는 JIT가 없습니다.
이 사이트의 주목할만한 Python 개발자 중 일부가 이에 대해 가장 잘 답변 할 것입니다.
여전히 언급하고 싶습니다. 통역 언어의 속도에 대해 논의 할 때 다음 위치 에서 호스팅되는 프로젝트를 가리키고 싶습니다 . Computer Language Benchmarks Game
벤치 마크 실행 전용 사이트입니다. 수행 할 지정된 작업이 있습니다. 누구나 선호하는 언어로 솔루션을 제출할 수 있으며 테스트는 각 솔루션의 실행 시간을 비교합니다. 솔루션은 동료 검토가 가능하고, 종종 다른 사람들에 의해 더욱 개선되며, 결과는 사양과 비교하여 확인됩니다. 장기적으로 이것은 다른 언어를 비교하는 가장 공정한 벤치마킹 시스템입니다.
이와 같은 요약 에서 알 수 있듯이 컴파일 된 언어는 해석 된 언어에 비해 상당히 빠릅니다. 그러나 그 차이는 아마도 정확한 컴파일 유형에서 그다지 크지 않을 것입니다. 파이썬 (그리고 그래프에서 파이썬보다 느린 다른 것)이 완전히 동적이라는 사실입니다. 개체는 즉석에서 수정할 수 있습니다. 유형은 즉석에서 수정할 수 있습니다. 따라서 일부 유형 검사는 컴파일 시간 대신 런타임으로 연기되어야합니다.
따라서 컴파일러의 이점에 대해 논쟁 할 수 있지만 언어마다 다른 기능이 있다는 점을 고려해야합니다. 그리고 이러한 기능은 본질적인 가격으로 제공 될 수 있습니다.
마지막으로, 속도에 대해 이야기 할 때 : 대부분의 경우 문제를 일으키는 것은 언어 및 언어의 느려짐이 아닌 잘못된 알고리즘입니다. 너무 느려서 언어를 전환 할 필요가 없었습니다. 코드에 속도 문제가 있으면 알고리즘을 수정합니다. 그러나 코드에 시간이 많이 걸리고 계산 집약적 인 루프 가있는 경우 일반적으로 다시 컴파일하는 것이 좋습니다. 대표적인 예는 스크립팅 언어에서 사용되는 C로 코딩 된 라이브러리입니다 (Perl XS libs 또는 Python의 경우 numpy / scipy, lapack / blas는 많은 스크립팅 언어에 대한 바인딩과 함께 사용할 수있는 lib의 예입니다).
JIT를 Just in time 컴파일러에서 Bytecode 표현으로 의미하는 경우 이러한 기능이 있습니다 (2.2 이후). 기계 코드에 대한 JIT를 의미하는 경우 아니오. 그러나 바이트 코드로의 컴파일은 많은 성능 향상을 제공합니다. 기계 코드로 컴파일하려면 Pypy가 찾고있는 구현입니다.
참고 : pypy는 Python 3.x에서 작동하지 않습니다.
코드 블록에서 속도 향상을 찾고 있다면 pypy 를 사용하여 C로 컴파일 되는 rpythonic 을 살펴볼 수 있습니다. Python 용 JIT에서 변환하는 데코레이터를 사용합니다.
참조 URL : https://stackoverflow.com/questions/13034991/does-the-python-3-interpreter-have-a-jit-feature
'Development Tip' 카테고리의 다른 글
Sun VM에서 할 수있는 Dalvik VM (Android의 VM)에서 할 수없는 것은 무엇입니까? (0) | 2020.12.31 |
---|---|
자바 스크립트 익명 함수 끝에 ".call (this)"을 쓰는 이유는 무엇입니까? (0) | 2020.12.30 |
Express.js 응답 시간 초과 (0) | 2020.12.30 |
translate3d 대 번역 성능 (0) | 2020.12.30 |
Windows에서 PostgreSQL을 시작하는 방법 (0) | 2020.12.30 |