파이썬을 구체적으로 요구한다는 점을 고려하여 귀하의 질문에 대답하려고 노력할 것입니다. 시뮬레이션 문제를 해결하는 방법을 설명하겠습니다. 더 빠른 시뮬레이션 전략이이 설명에 나와 있습니다.
먼저, 파이썬으로 새로운 시뮬레이션을 프로토 타이핑합니다. 물론 NumPy 와 SciPy 를 최대한 활용하려고 노력합니다 . NumPy는 수치 시뮬레이션에 적합한 어레이 데이터 유형을 제공하는 반면, SciPy는 NumPy 어레이로 작업하는 광범위한 수치 루틴을 제공합니다.
프로토 타입이 어느 정도 작동하면 프로그램이나 스크립트의 어느 부분이 병목 현상인지 알아 봅니다. 이에 대한 일반적인 후보가 있습니다.
- 파이썬의 루프는 느립니다. 아주 느린.
- Python은 duck typing을 사용하므로 함수 호출이 느려질 수 있습니다.
간단한 프로파일 링 전략을 사용하여 모든 런타임이 소비되는 위치를 습득합니다. IPython 쉘 (충분히 추천 할 수 없음)을 사용하여 스크립트를 다음과 같이 실행합니다.
%timeit script.py
이 "마법 명령"은 프로파일 링을 수행합니다 ( timeit 사용) ) 스크립트가 종료 된 후 시간을 목록으로 표시합니다. 이 목록을 사용하여 코드가 너무 느린 위치를 찾으십시오.
속도를 높여야하는 부분을 정리 한 후에는 컴파일 된 언어 사용을 고려할 수 있습니다. 나는 두 가지 해결책을 지적 할 것이다.
먼저 Cython 언어가 있습니다. Cython은 Python과 매우 유사한 프로그래밍 언어입니다 (사실, Python 코드는 종종 유효한 Python 코드이기도합니다). 그러나 Cython 컴파일러는 Cython 파일을 C 코드로 변환 한 다음 Python에서 사용 가능한 모듈로 컴파일 할 수 있습니다. Cython은 NumPy 배열을 이해합니다. Cython을 사용하면 두 가지 방법으로 도움을받을 수 있습니다. 먼저 데이터 유형을 소개 할 수 있습니다. 함수 호출 속도가 빨라집니다. 또한 배열을 반복하면 루프가 더 빨리 실행됩니다 (사실 더미 변수와 배열을 모두 입력하면 일반 C 루프가 나타납니다!). 둘째, 내 실험에서 형식화되지 않은 스크립트조차도 해석되지 않고 컴파일되었다는 사실 때문에 조금 더 빠르게 실행됩니다.
유용한 다른 컴파일 된 언어는 포트란입니다. 파이썬에서 포트란을 사용하는 방법에는 여러 가지가 있습니다 ( f2py , fortwrap , Cython ) . 나에게 개인적으로 f2py가 가장 쉬운 방법 인 것처럼, 나는 그것이 무엇을하는지 빨리 설명 할 것입니다. f2py는 포트란 코드를 파이썬 모듈로 컴파일 할 수 있습니다. NumPy 배열을 파이썬 공간의 입력 및 출력 변수로 사용할 수 있습니다. 포트란 공간에서는 일반적인 포트란 배열이됩니다. 최대 포트란 속도로 조작 할 수 있습니다.
개인적으로 함수 호출 수가 병목 현상이 발생하는 Cython을 사용하는 경향이 있습니다. 루프가 많은 항목의 경우 f2py를 선호합니다 (강한 포트란 배경이 있기 때문에).
Fortran에 대한 추가 참고 사항 : 현대 Fortran은 NumPy와 매우 유사하게 읽고 씁니다. 구문은 매우 가깝습니다. 따라서 NumPy 코드를 Fortran 코드로 쉽게 변환 할 수 있습니다.
Cython과 f2py는 어떤 방식 으로든 패러 시즘을 지원합니다. Cython의 경우 여기 에서 도움말을 찾을 수 있지만 Fortran의 경우 OpenMP 또는 MPI 와 같은 표준 기술이 있습니다 . 또한 MPI를위한 Python 래퍼가 있습니다. 도 있습니다. 개인적으로, 나는 파이썬 레벨에서 mpi4py를 사용하고 포트란에서 OpenMP를 사용합니다.
H.-P의 Python Scripting For Computational Science 책을 추천 해 드리겠습니다. Langtangen은 일반적으로 Python과 Python을 조금 더 빠르게 만드는 전략에 대한 훌륭한 리소스입니다. 불행히도, AFAIR는 Cython에 대해서는 언급하지 않았습니다. 두 번째 자료 로이 슬라이드를 볼 수 있습니다 . 이것들은이 게시물에서 언급 한 모든 것에 대한 예를 제공합니다 ( 여기 의 코드 및 소스 참조 ). 인터넷에는 다른 좋은 슬라이드 세트가 많이 있습니다.
보다 구체적인 질문이 있으시면 기꺼이 도와 드리겠습니다!