Ефективність використання petsc4py проти c / c ++ / fortran


11

Наскільки повільніше petsc4py vs c / c ++ / fortran?

Я усвідомлюю, що це буде значно залежати від коду, який виконується, а як щодо чогось простого, як матричний векторний продукт?

Відповіді:


11

Це широко сприймається в науковому спільноті програмування, і я вважав би невизначеність ефективності одним з головних "міфів" в обчислювальній науці.

Як обговорює @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 і ефективно працювати паралельно на десятках тисяч ядер.


У мене також є подібне занепокоєння wrt невеликого неструктурованого коду. PETSc надає лише структури даних та розв'язувачі, але мені все одно доводиться читати в сітці (до вхідного файлу до 4 ГБ), розділі, створювати відображення, перебирати елементи, обчислювати локальні (елементи) матриці жорсткості тощо, перш ніж PETSc зможе зібрати та вирішити . Чи не пітон буде повільнішим для цього, не пов'язаного з PETSc, спеціально вводу-виводу, відображень та обчислень рівня елементів. Тому що решта коду все одно проста.
stali

Обчислення рівня елементів зазвичай передаються як ядро ​​(див. App.f90Джерело в perftest). Різниця в продуктивності вводу / виводу немає. Ви подивилися на FEniCS для пакету вищого рівня?
Арон Ахмадія

Ти правий. Я розумію, але в моєму конкретному випадку є багато таких ядер (функції форми для різних типів елементів, обчислення рівня елементів, відображення тощо), що становить близько 90% коду. Я поглянув на Fenics деякий час назад, і багато деталей, таких як робота із зовнішніми сітками та накладення BC тощо, були не зовсім зрозумілі на перший погляд або здаються складнішими (принаймні, для мене). Крім того, я використовую Fortran, який досить простий у використанні (зважаючи на відмінну документацію PETSc) для людей, які не працюють з CS, як я. Насправді мені в роботі легше, ніж python :).
stali

7

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. Удачі!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.