Наскільки повільніше petsc4py vs c / c ++ / fortran?
Я усвідомлюю, що це буде значно залежати від коду, який виконується, а як щодо чогось простого, як матричний векторний продукт?
Наскільки повільніше petsc4py vs c / c ++ / fortran?
Я усвідомлюю, що це буде значно залежати від коду, який виконується, а як щодо чогось простого, як матричний векторний продукт?
Відповіді:
Це широко сприймається в науковому спільноті програмування, і я вважав би невизначеність ефективності одним з головних "міфів" в обчислювальній науці.
Як обговорює @fcruz , petsc4py
це обгортка бібліотек PETSc, а не повторна реалізація PETSc в Python. Таким чином, ви можете очікувати, що будь-які штрафи за продуктивність будуть надходити або з копіювання масивів до і з PETSc, або з накладних витрат у ваших кодах / функціях викликів драйверів. petsc4py
дуже ретельно реалізується, і поки ви розумієтеnumpy
інтерфейси багатовимірного масиву, ви можете уникнути накладних копій. У більшості випадків використання, в якому я працюю, покарання за ефективність роботи в Python становить близько 10-40%, і я часто отримую значно інші способи, які більше, ніж складають цей показник. Насправді, кілька досвідчених розробників HPC Python, з якими я спілкувався, дотримуються думки, що ця різниця в продуктивності зазвичай може бути зменшена ще більше, і коли Python керує обчислювально дорогими кодами, це, безумовно, буде так.
Сам petsc4py
сховище містить ряд корисних прикладів для ілюстрації компромісу продуктивності та гнучкості. Подивіться у petsc4py
вихідне сховище демо-версії perftest
, яка вирішує нелінійну систему рівнянь, використовуючи як драйвер Python, так і драйвер C (над ядром Fortran, що міститься App.f90
в цьому каталозі). Витратні показники тут складають приблизно 10%.
Як конкретний приклад, я є частиною команди вчених, що працюють над PyClaw , програмним пакетом, який інтерфейсується в PETSc для паралельного управління сіткою та застарілих ядер Fortran для вирішення проблем Рімана на інтерфейсах комірок. Ми провели досить ретельне дослідження зниження продуктивності від переходу з драйвера Fortran, і результати ви можете побачити внизу сторінки 5 в таблиці 1 в конференційному документі . У нашому випадку ми торгували трохи основної продуктивності, щоб легко інтерфейсувати наш код до PETSc і Fortran і ефективно працювати паралельно на десятках тисяч ядер.
App.f90
Джерело в perftest
). Різниця в продуктивності вводу / виводу немає. Ви подивилися на FEniCS для пакету вищого рівня?
Petsc4py - це просто ще один спосіб отримати доступ до PETSc, але з python , або це те саме, що сказати, що petsc4py забезпечує прив'язку, так що з python ви можете отримувати доступ до структур даних та підпрограми PETSc, які призначені для зменшення зусиль розробки паралельних вирішувачів PDE (ця шкала).
PETSc надає кілька рівнів абстракцій для своїх вирішувачів, і ви навіть можете використовувати PETSc для реалізації власного рішення. На найнижчому рівні абстракції програмного забезпечення PETSc використовує BLAS, LAPACK та MPI, і в кращому випадку це буде так само швидко, як і їх реалізація.
Тепер, pets4py використовує cython для здійснення прив'язки до PETSc. Витрати на використання цитона відносяться до того, скільки обчислень буде проведено з PETSc. Якщо ви використовуєте високоякісні розв'язувачі PDE від PETSc, накладні витрати повинні бути досить маленькими, що вам не потрібно про них турбуватися.
Можливо, важливішим питанням, ніж порівняння ефективності PETSc проти GEMV, є те, якщо PETSc є правильним інструментом для вашої роботи. Якщо вам потрібно реалізувати нетривіальні паралельні розв'язувачі PDE, то, швидше за все, PETSc дійсно вам допоможе. Однак якщо вам потрібно зробити купу GEMV, вам потрібна бібліотека BLAS. Удачі!