O ile wolniej jest Petsc4py vs C / C ++ / Fortran?
Zdaję sobie sprawę, że będzie to w znacznym stopniu zależeć od wykonywanego kodu, ale co z czymś prostym, takim jak produkt macierz-wektor?
O ile wolniej jest Petsc4py vs C / C ++ / Fortran?
Zdaję sobie sprawę, że będzie to w znacznym stopniu zależeć od wykonywanego kodu, ale co z czymś prostym, takim jak produkt macierz-wektor?
Odpowiedzi:
Jest to szeroko rozpowszechniony problem społeczności naukowców zajmujących się programowaniem naukowym i uważam, że niepewność wyników jest jednym z głównych „mitów” w nauce obliczeniowej.
Jak dyskutuje @fcruz , petsc4py
jest to opakowanie bibliotek PETSc, a nie ponowna implementacja PETSc w Pythonie. W związku z tym można oczekiwać, że wszelkie kary związane z wydajnością będą wynikać z kopiowania tablic do i z PETSc, lub z nakładów na wywołania kodu / funkcji sterownika. petsc4py
jest bardzo starannie wdrażany i tak długo, jak rozumiesznumpy
wielowymiarowe interfejsy tablicowe, można uniknąć narzutu kopiowania. W większości przypadków użycia, w których pracuję, spadek wydajności w pracy w Pythonie jest rzędu 10-40%, i często zyskuję znacznie na inne sposoby, które więcej niż rekompensują to uderzenie wydajności. W rzeczywistości kilku bardziej doświadczonych programistów HPC Python, z którymi rozmawiałem, uważa, że tę różnicę wydajności można zwykle jeszcze bardziej zmniejszyć, a kiedy Python generuje drogie obliczeniowo kody, z pewnością tak będzie.
Samo petsc4py
repozytorium zawiera szereg użytecznych przykładów ilustrujących kompromis między wydajnością a elastycznością. Poszukaj w petsc4py
repozytorium źródłowym demo o nazwie perftest
, która rozwiązuje nieliniowy układ równań przy użyciu zarówno sterownika Python, jak i sterownika C (na jądrze Fortran podanym App.f90
w tym katalogu). Narzut wydajności jest tutaj rzędu 10%.
Jako konkretny przykład, jestem częścią zespołu naukowców pracujących nad PyClaw , pakietem oprogramowania, który łączy się z PETSc do zarządzania równoległą siecią i starszych jąder Fortran do rozwiązywania problemów Riemanna na interfejsach komórkowych. Przeprowadziliśmy dość dokładne badanie obniżenia wydajności po przełączeniu ze sterownika Fortran, a wyniki można zobaczyć na dole strony 5 w Tabeli 1 w dokumencie konferencyjnym . W naszym przypadku wymieniliśmy trochę wydajności na rdzeń, aby móc łatwo połączyć nasz kod z PETSc i Fortranem i działać wydajnie równolegle na dziesiątkach tysięcy rdzeni.
App.f90
źródło w perftest
). Nie ma różnicy w wydajności we / wy. Czy szukałeś pakietu FEniCS dla pakietu wyższego poziomu?
Petsc4py to po prostu inny sposób na uzyskanie dostępu do PETSc, ale z Pythona , lub to samo powiedzieć, że Petsc4py zapewnia powiązania, dzięki czemu z Pythona można uzyskać dostęp do struktur danych i procedur PETSc, które mają zmniejszyć wysiłek związany z opracowaniem równoległych solverów PDE (ta skala).
PETSc zapewnia kilka poziomów abstrakcji dla swoich solverów, a nawet możesz użyć PETSc do implementacji własnego solvera. Na najniższym poziomie abstrakcji oprogramowania PETSc używa BLAS, LAPACK i MPI, a co najwyżej będzie tak szybkie, jak ich wdrożenie.
Teraz Pets4py używa cytonu do implementacji powiązań z PETSc. Narzut związany z używaniem cytonu zależy od tego, ile obliczeń należy wykonać z PETSc. Jeśli używasz solverów PDE wysokiego poziomu z PETSc, koszty ogólne powinny być na tyle małe, że nie musisz się o nie martwić.
Być może ważniejsze pytanie niż porównanie wydajności PETSc z GEMV dotyczy tego, czy PETSc jest właściwym narzędziem do pracy. Jeśli potrzebujesz zaimplementować nietrywialne równoległe solwery PDE, najprawdopodobniej PETSc naprawdę ci pomoże. Jeśli jednak potrzebujesz zrobić kilka GEMV, potrzebujesz biblioteki BLAS. Powodzenia!