답변:
이것은 과학적 프로그래밍 커뮤니티에서 널리 알려진 관심사이며, 성능 불확실성은 계산 과학의 주요 "신화"중 하나라고 생각합니다.
으로 @fcruz 나와, petsc4py
PETSc 라이브러리에 대한 래퍼가 아닌 파이썬에서 PETSc의 재 구현입니다. 따라서 어레이를 PETSc로 복사하거나 PETSc에서 복사하거나 드라이버 코드 / 함수 호출의 오버 헤드로 인해 성능 저하가 발생할 수 있습니다. petsc4py
매우 신중하게 구현되며 이해하는 한numpy
다차원 배열 인터페이스를 사용하면 복사 오버 헤드를 피할 수 있습니다. 필자가 작업하는 대부분의 유스 케이스에서 Python 작업시 성능 저하는 10-40 % 정도이며, 종종이 성능 저하를 보완하는 것 이상의 다른 방식으로 얻을 수 있습니다. 사실, 제가 경험 한 더 경험이 많은 HPC Python 개발자들은이 성능 차이가 보통 훨씬 더 줄어들 수 있으며, 파이썬이 계산 비용이 많이 드는 코드를 구동 할 때 분명히 그럴 것이라고 생각합니다.
petsc4py
저장소 자체가 성능 / 유연성의 균형을 설명하는 유용한 예제들을 제공합니다. 찾는 위치 petsc4py
라는 데모 소스 저장소 perftest
파이썬 드라이버 (제공 포트란 커널을 통해 C 드라이버를 모두 사용하여 방정식의 비선형 시스템을 해결, App.f90
해당 디렉토리를). 여기에서 성능 오버 헤드는 10 % 정도입니다.
구체적인 예로, 병렬 그리드 관리를 위해 PETSc에 인터페이스하는 소프트웨어 패키지 인 PyClaw , 셀 인터페이스의 Riemann 문제를 해결하기위한 레거시 포트란 커널을 연구하는 과학자 팀의 일원입니다 . Fortran 드라이버에서 전환하여 성능 저하에 대해 상당히 신중하게 연구했으며, 회의 논문의 표 1에서 5 페이지 하단에 결과가 나와 있습니다. 이 경우 코드를 PETSc 및 Fortran에 쉽게 인터페이스하고 수만 개의 코어에서 효율적으로 병렬로 실행하는 기능을 위해 약간의 온 코어 성능을 교환했습니다.
App.f90
소스 참조 perftest
). I / O에는 성능 차이가 없습니다. 더 높은 수준의 패키지를 위해 FEniCS 를 살펴 보셨습니까 ?
Petsc4py는 PETSc에 액세스하는 또 다른 방법이지만 python 또는 petsc4py는 바인딩을 제공하므로 파이썬에서 병렬 PDE 솔버 개발 노력을 줄이는 PETSc 데이터 구조 및 루틴에 액세스 할 수 있습니다. (그 규모).
PETSc는 솔버에 여러 레벨의 추상화를 제공하며 PETSc를 사용하여 자신의 솔버를 구현할 수도 있습니다. 가장 낮은 수준의 소프트웨어 추상화에서 PETSc는 BLAS, LAPACK 및 MPI를 사용하며, 최대한 구현 속도만큼 빠릅니다.
이제 pets4py는 cython을 사용하여 PETSc에 대한 바인딩을 구현합니다. cython 사용의 오버 헤드는 PETSc에서 수행 될 계산량과 관련이 있습니다. PETSc의 고급 PDE 솔버를 사용하는 경우 오버 헤드가 작아 걱정할 필요가 없습니다.
PETSc와 GEMV의 성능 비교보다 더 중요한 질문은 PETSc가 작업에 적합한 도구인지 여부입니다. 사소한 병렬 PDE 솔버를 구현해야하는 경우 PETSc가 실제로 도움이 될 것입니다. 그러나 많은 GEMV를 수행해야하는 경우 BLAS 라이브러리가 필요합니다. 행운을 빕니다!