Efficienza nell'uso di petsc4py rispetto a c / c ++ / fortran


11

Quanto è più lento petsc4py vs c / c ++ / fortran?

Mi rendo conto che dipenderà in modo significativo dal codice in esecuzione, ma che dire di qualcosa di semplice come un prodotto a matrice vettoriale?

Risposte:


11

Questa è una preoccupazione diffusa nella comunità della programmazione scientifica e considererei l'incertezza delle prestazioni come uno dei maggiori "miti" della scienza computazionale.

Come discute da @fcruz , petsc4pyè un wrapper per le librerie PETSc, non una reimplementazione di PETSc in Python. Pertanto, è possibile aspettarsi che eventuali penali delle prestazioni provengano dalla copia di array da e verso PETSc o dall'overhead nelle chiamate del codice / funzione del driver. petsc4pyè implementato con molta attenzione e fintanto che capisci ilnumpyinterfacce array multidimensionali, è possibile evitare l'overhead della copia. Per la maggior parte dei casi d'uso in cui lavoro, la penalità prestazionale nel lavorare in Python è dell'ordine del 10-40%, e spesso guadagno sostanzialmente in altri modi che compensano più di questo successo. In effetti, molti altri sviluppatori esperti di HPC Python con cui ho parlato sostengono che questa differenza di prestazioni di solito può essere ulteriormente ridotta, e quando Python sta guidando codici computazionalmente costosi, questo sarà certamente il caso.

Il petsc4pyrepository stesso presenta una serie di esempi utili per illustrare il compromesso prestazioni / flessibilità. Cerca nel petsc4pyrepository di origine la demo chiamata perftest, che risolve un sistema non lineare di equazioni usando sia un driver Python che un driver C (su un kernel Fortran fornito App.f90in quella directory). Il sovraccarico di prestazioni qui è dell'ordine del 10%.

Come esempio concreto, faccio parte di un team di scienziati che lavorano su PyClaw , un pacchetto software che si interfaccia con PETSc per la gestione della griglia parallela e legami Fortran legacy per risolvere i problemi di Riemann sulle interfacce cellulari. Abbiamo condotto uno studio abbastanza accurato sul degrado delle prestazioni dal passaggio da un driver Fortran e puoi vedere i risultati in fondo a pagina 5 nella Tabella 1 del documento della conferenza . Nel nostro caso, abbiamo scambiato un po 'di prestazioni on-core per la capacità di interfacciare facilmente il nostro codice con PETSc e Fortran e di funzionare in modo efficiente in parallelo su decine di migliaia di core.


Ho anche una preoccupazione simile per un piccolo codice non strutturato. PETSc fornisce solo le strutture di dati e i risolutori, ma devo ancora leggere nella mesh (file di input fino a 4 GB), partizionare, creare mappature, passare in rassegna gli elementi, calcolare matrici di rigidità locali (elementi) ecc. Prima che PETSc possa assemblare e risolvere . Python non sarebbe più lento per questa roba non correlata a PETSc, in particolare I / O, mappature e calcoli a livello di elemento. Perché il resto del codice è comunque semplice.
Stali,

I calcoli a livello di elemento vengono in genere passati come kernel (vedere il App.f90sorgente in perftest). Non vi sono differenze di prestazioni nell'I / O. Hai esaminato FEniCS per un pacchetto di livello superiore?
Aron Ahmadia,

Hai ragione. Ho avuto l'idea, ma nel mio caso particolare ci sono molti kernel (funzioni di forma per diversi tipi di elementi, calcoli a livello di elemento, mappature ecc.) Che rappresentano circa il 90% del codice. Ho guardato Fenics qualche tempo fa e molti dettagli come trattare con mesh esterne e imponenti BC ecc. Non erano abbastanza chiari a prima vista o sembravano più complicati (almeno per me). Inoltre uso Fortran che è abbastanza semplice da usare (vista l'eccellente documentazione PETSc) per persone non CS come me. In realtà lo trovo più facile di Python :) per il mio lavoro.
Stali,

7

Petsc4py è solo un altro modo per accedere a PETSc ma da Python , o è lo stesso per dire che, petsc4py fornisce i collegamenti in modo che, da Python, sia possibile accedere alle strutture di dati PETSc e alle routine che hanno lo scopo di ridurre lo sforzo di sviluppo di solutori PDE paralleli (quella scala).

PETSc offre diversi livelli di astrazione ai loro risolutori e puoi persino usare PETSc per implementare il tuo solutore. Al livello più basso di astrazione del software, PETSc utilizza BLAS, LAPACK e MPI, e nella migliore delle ipotesi sarà veloce quanto l'implementazione di questi.

Ora pets4py utilizza cython per implementare i collegamenti a PETSc. Il sovraccarico dell'utilizzo del cython è relativo alla quantità di calcoli che verranno eseguiti dalla PETSc. Se usi i solutori PDE di alto livello di PETSc, i costi generali dovrebbero essere abbastanza piccoli da non doverti preoccupare di loro.

Una domanda forse più importante del confronto delle prestazioni di PETSc vs GEMV è se PETSc è lo strumento giusto per il tuo lavoro. Se devi implementare solutori PDE paralleli non banali, molto probabilmente PETSc ti aiuterà davvero. Tuttavia, se è necessario eseguire un gruppo di GEMV, si desidera una libreria BLAS. In bocca al lupo!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.