Python 프로그램을 C/C++ 코드로 변환하시겠습니까?
Python 프로그램을 C/C++로 변환할 수 있습니까?
몇 가지 알고리즘을 구현해야 하는데 성능 차이가 C/C++(제가 잘하지 못하는 것)에서 수행할 때 겪게 되는 모든 문제를 정당화할 수 있을 만큼 큰지 잘 모르겠습니다.하나의 간단한 알고리즘을 작성하여 이러한 변환된 솔루션에 대해 벤치마킹하는 것을 생각해 보았습니다.그것만 Python 버전보다 훨씬 빠르면 C/C++에서 하는 것 외에 다른 방법이 없습니다.
C 베리에이션이 x시간 적게 필요한 경우 알고리즘을 더 오래/다시 실행하는 데 그 시간을 투자합니다.
여기서 "투자"란 단어는 적절하지 않습니다.
Python에서 작업용 구현을 구축합니다.C버전을 완성하기 훨씬 전에 이 일을 끝낼 수 있을 거야
Python 프로파일러로 성능을 측정하십시오.발견된 모든 문제를 해결합니다.데이터 구조 및 알고리즘을 필요에 따라 변경하여 실제로 이 작업을 수행합니다.C에서 첫 번째 버전을 완료하기 전에 이 작업을 완료해야 합니다.
그래도 너무 느리면 잘 설계되고 세심하게 구성된 Python을 수동으로 C로 번역합니다.
사후판단 방식 때문에 기존 Python에서 두 번째 버전(기존 유닛 테스트 및 기존 프로파일링 데이터 사용)을 수행하는 것이 C 코드를 처음부터 수행하는 것보다 더 빠를 것입니다.
이 인용문은 중요합니다.
톰슨 망원경 제작자를 위한 규칙
6인치 거울을 만드는 것보다 4인치 거울을 만드는 것이 더 빠르다.빌 맥키넌
왕학원
네, 시튼을 보세요Python을 C로 변환하여 속도를 높입니다.
Sheet Skin은 "Python-to-C++ 컴파일러"입니다.
해커 뉴스에서 이 새로운 도구를 우연히 발견했어요.
"Nuitka는 Python 인터프리터를 대체할 수 있으며 CPython 2.6, 2.7, 3.2 및 3.3이 제공하는 모든 구성을 컴파일합니다.Python을 C++ 프로그램으로 변환하여 "libpython"을 사용하여 CPython과 동일한 방식으로 매우 호환성이 높은 방식으로 실행합니다.
이것이 오래된 내용이라는 것을 알지만, 저는 도움이 될 만한 정보를 주고 싶었습니다.
저는 개인적으로 PyPy를 사용하고 있는데, PIP를 사용하면 설치가 매우 간단합니다.Python/PyPy 인터프리터를 자유롭게 사용할 수 있기 때문에 코드를 변경할 필요가 없으며 표준 Python 인터프리터(Python 2x 또는 3x)보다 약 40배 빠릅니다.코드를 관리하기 위해 pyCharm Community Edition을 사용하고 있는데 너무 좋아요.
언어보다 작업에 집중할 수 있게 해주는 Python으로 코드 쓰는 것을 좋아합니다.그것은 저에게 큰 장점입니다.또한 속도가 더 빨라야 하는 경우 언제든지 Windows, Linux 또는 Mac용 바이너리로 컴파일할 수 있습니다(단순하게 컴파일할 수는 없지만 다른 툴로 가능).제 경험상 컴파일 시 PyPy보다 약 3.5배 빠른 속도로 python보다 140배 빠른 속도입니다.PyPy는 Python 3x 및 2x 코드에서 사용할 수 있으며, PyCharm과 같은 IDE를 사용하면 PyPy, Cython, Python을 매우 쉽게 교환할 수 있습니다(단, 초기 학습과 셋업이 조금 필요합니다).
어떤 사람들은 이것에 대해 저와 논쟁할 수 있지만, 저는 PyPy가 Cython보다 빠르다고 생각합니다.하지만 둘 다 좋은 선택이야.
편집: 컴파일에 관한 또 하나의 간단한 메모를 하겠습니다.컴파일 할 때 결과 바이너리는 python 스크립트보다 훨씬 커집니다.이것은 모든 의존성을 내장하고 있기 때문입니다.하지만 몇 가지 뚜렷한 이점을 얻을 수 있습니다: 속도! 이제 이 앱은 Python이나 라이브러리가 없는 어떤 OS를 위해 컴파일했느냐에 따라 달라집니다.lol은 코드를 혼란스럽게 하고 기술적으로 (어느 정도) '실동' 준비가 되어 있습니다.일부 컴파일러는 C코드를 생성하기도 하는데, 저는 C코드가 유용한지, 아니면 횡설수설인지 살펴본 적이 없습니다.행운을 빌어요.
도움이 됐으면 좋겠다.
Sheet Skin 이외에 C++로 변환하는 또 다른 옵션은 Pythran입니다.
Micha Gorelick과 Ian Ozvald의 High Performance Python을 인용하면 다음과 같습니다.
Pythran은 Python의 서브셋을 위한 Python-to-C++ 컴파일러로, 부분적인 것을 포함합니다.
numpy
지지하다.Numba 및 Cython과 약간 비슷하게 기능합니다. 함수의 인수에 주석을 달면 추가 유형의 주석과 코드 전문화를 이어받습니다.벡터화 가능성과 OpenMP 기반 병렬화 가능성을 활용합니다.Python 2.7에서만 실행됩니다.Pythran의 매우 흥미로운 특징 중 하나는 병렬화 기회를 자동으로 포착하려고 시도한다는 것입니다(예를 들어,
map
를 병행 코드로 변환합니다.추가적인 수고를 들이지 않아도 됩니다.또한 다음을 사용하여 병렬 섹션을 지정할 수 있습니다.pragma omp
> 디렉티브, 이 점에서 Cython의 OpenMP 지원과 매우 유사합니다.배후에서 Pythran은 일반 Python과 numpy 코드를 모두 사용하여 Cython의 결과보다 더 빠른 매우 빠른 C++로 공격적으로 컴파일하려고 합니다.
이 프로젝트는 아직 어려서 버그가 발생할 수 있습니다.또한 개발팀은 매우 친절하고 몇 시간 안에 버그를 수정하는 경향이 있습니다.
http://code.google.com/p/py2c/은 가능성이 있는 것 같습니다.또, 사이트상에서 다음과 같이 언급하고 있습니다.Cython, Sheatskin 및 RPython은 Python API 호출로 가득 찬 C/C++보다 훨씬 빠른 Python 코드를 순수 C/C++로 변환하고 있음을 확인합니다.주의: 아직 시도하지 않았지만...
새로운 솔루션에 대한 답이 없다는 것을 깨달았습니다.코드에 Numpy가 사용되고 있다면 Pythran을 사용해 보는 것이 좋습니다.
http://pythran.readthedocs.io/
제가 시도했던 기능들은 피트란이 굉장히 좋은 결과를 냅니다.결과적으로 생성되는 함수는 Fortran 코드 작성 속도만큼 빠르며(또는 약간 느릴 뿐), Cython 솔루션보다 약간 빠릅니다(쿼트 최적화).
Cython에 비해 장점은 Numpy에 최적화된 Python 함수에서 Pythran을 사용하면 된다는 것입니다. 즉, 루프의 모든 변수에 대해 루프를 확장하고 유형을 추가할 필요가 없습니다.Pythran은 코드를 분석하는데 시간이 걸리고 그래서 그것은 그 조작을 이해한다.numpy.ndarray
.
또한 Numba나 Just In Time 컴파일을 기반으로 한 다른 프로젝트와 비교하면 매우 큰 장점이며, (내가 아는 바로는) 매우 효율적으로 루프를 확장해야 합니다.그리고 CPython과 Numpy만 사용하면 루프가 있는 코드는 매우 비효율적으로 됩니다.
피트란의 단점: 수업이 없다!그러나 실제로 최적화해야 할 기능만 컴파일하면 되기 때문에 그다지 귀찮지 않습니다.
또 다른 포인트:Pythran은 OpenMP 병렬 처리를 매우 쉽게 지원합니다.하지만 mpi4py는 지원되지 않는 것 같습니다.
언급URL : https://stackoverflow.com/questions/4650243/convert-python-program-to-c-c-code
'programing' 카테고리의 다른 글
Java Servlet이란? (0) | 2022.08.27 |
---|---|
Java POJO의 필드, 변수, 속성 및 속성은 어떤 차이가 있습니까? (0) | 2022.08.27 |
정적 링크와 동적 링크 (0) | 2022.08.27 |
vue에서 getters로 파라미터를 송신하는 방법 (0) | 2022.08.27 |
Java에서 Serializable과 Externalizable의 차이점은 무엇입니까? (0) | 2022.08.27 |