Quali sono le principali differenze tra PETSc e Trilinos?


24

Per quanto ne so, i due grandi framework software generici per la scienza computazionale del Dipartimento dell'Energia sono PETSc e Trilinos . Sembrano simili a prima vista, al di là delle differenze di linguaggio (C contro C ++). Quali sono le principali differenze tra i due framework e quali fattori dovrebbero influenzare la scelta l'uno rispetto all'altro? (Ignora i pregiudizi istituzionali e le infrastrutture esistenti.)


1
C'è stata una discussione un po 'datata (dal 2009) su un consiglio CFD qualche tempo fa; forse la domanda migliore da porsi è: da allora, ci sono stati cambiamenti significativi nella progettazione di entrambi i pacchetti?
Eismail

Ahmed, quella discussione si concentra principalmente sui precondizionatori. Speravo in un punto di vista più ampio rispetto alle discussioni sui solutori iterativi. Inoltre, dal momento che si parla molto di PETSc su scicomp.SE, ho pensato che anche Trilinos avrebbe dovuto dedicargli alcuni post, e questa sembra una delle prime domande che un potenziale utente di Trilinos dovrebbe porre. Non so molto su Trilinos o PETSc, quindi ho pensato che la risposta mi avrebbe aiutato anche a imparare qualcosa.
Geoff Oxberry,

Risposte:


19

Ci sono enormi differenze nella cultura, nello stile di codifica e nelle capacità. Probabilmente la differenza fondamentale è che Trilinos cerca di fornire un ambiente per risolvere i problemi FEM e PETSc fornisce un ambiente per risolvere i problemi di algebra lineare sparsa.

Perché è significativo?

  • Trilinos fornirà un gran numero di pacchetti relativi a parti separate del solutore FEM. A volte questi pacchetti funzionano insieme a volte no. Anche i componenti di base sono nel proprio pacchetto e strumenti avanzati C ++
  • PETSC fornisce una piccola quantità di routine core su cui è possibile basarsi, ma lascia i risolutori FEM in pacchetti di terze parti. Per questo motivo, è associato a una comunità più ampia della semplice FEM. Ad esempio, anche i risolutori di autovettori sono di terze parti che è probabilmente una parte importante dell'algebra lineare.
  • In conclusione, Trilinos si concentra lavorando bene all'interno dei propri pacchetti e PETSc ha interfacce che richiamano molti pacchetti di middleware (ho spesso sentito che si chiama "più leggero" per questo, ma non vorrei fare questa affermazione)

IMHO, che dovresti usare dipende davvero dal problema. Si prega di condividere maggiori dettagli per noi per rispondere a questa domanda.


Non ho in mente un problema specifico. Sono interessato a fare esperienza con uno di quei grandi pacchetti per la risoluzione di PDE e volevo avere un'idea dei pro e dei contro in modo da poter prendere una decisione più informata su quale investire il mio tempo.
Geoff Oxberry

11

Se vuoi ascoltare le informazioni tecniche dai vari pacchetti, prendendo le domande dal punto di vista di un normale utente HPC, il podcast RCE di Brock Palen e Jeff Squyres è una risorsa eccellente. Hanno episodi su PETSc e su Trilinos che sono molto chiari.

aterrel ha ragione nelle sue descrizioni - PETSc è un pacchetto (comparativamente) piccolo, integrato, ben congegnato di solutori lineari e non lineari per tutti gli usi, che si potrebbe quindi usare in un framework di solutori; Trilinos è una raccolta di pacchetti, con l'integrazione che si sta evolvendo, principalmente finalizzata a diventare quel solutore, e include cose come solutori ODE, pacchetti mesh, ecc.


7

Vorrei aggiungere al buon commento di aterrel che Trilinos è davvero una grande borsa di cose (Sandia) e Petsc è una biblioteca più focalizzata. Se si desidera confrontare, è necessario confrontare il supporto del risolutore sparse di PETSc con l'ecosistema di risolutore sparse ePetra / ML / etc di Trilinos, che fa cose simili. Inoltre, PETSc supporta le reti strutturate e Sandia è stata storicamente esplicitamente una casa non strutturata (FEM), quindi Trilinos ha poco o nessun supporto per le reti strutturate AFAIK. E Trilinos ha capacità che PETSc non tocca come il supporto stocastico di PDE.


3
Bene da aggiungere alle cose che Trillinos ha che PETSc non ha: differenziazione automatica, bilanciamento del carico, metodi di continuazione dell'arco, pacchetti di ottimizzazione. Ma tutti questi sono stati integrati in PETSc da pacchetti di terze parti (alcuni dei quali provenienti da Trilinos) e possono essere aggiunti con una configurazione PETSc --download-foo.
Aterrel,

6

Come qualcuno che ha trascorso diversi anni a lavorare con entrambi, la mia prospettiva è che entrambi i pacchetti non siano poi così diversi. È vero, usano linguaggi diversi, ma lo usano in modi molto simili (entrambi sono orientati agli oggetti, Trilinos fa poco altro uso del C ++ oltre all'uso delle classi). Entrambi supportano praticamente tutto ciò che vorrete fare con l'algebra lineare (tramite sotto-pacchetti o cose che scaricano al volo, che dal punto di vista dell'utente non fa alcuna differenza). Infine, entrambi hanno un buon numero di sotto-pacchetti più oscuri e probabilmente non molto usati (ad esempio 'setaccio' dell'interfaccia mesh di PETSc, differenziazione automatica in Trilinos, ecc.).

Per me, l'appello di Trilinos è duplice: - Il numero di sotto-pacchetti oscuri in Trilinos è enormemente più grande; se mai avessi bisogno di qualcosa in direzione X, lo troverò in Trilinos e funzionerà con il resto del mio codice. - Trilinos è molto più conservatore nella sua strategia di sviluppo. PETSc rinomina le cose continuamente e ogni versione richiede agli utenti di recuperare il ritardo con funzioni rinominate, librerie diverse, ecc.


Suppongo che tu abbia usato solo le interfacce più vecchie poiché molte di quelle più recenti usano ampiamente i template.
Aterrel,

Questo è per lo più vero. Immagino che tu abbia commentato la frase "poco altro uso del C ++ oltre le classi". Quello che intendevo dire è che non utilizza RTTI, eccezioni, eredità multipla ecc., Nella maggior parte dei luoghi. È relativamente semplice da capire se si conosce C e un po 'di orientamento dell'oggetto.
Wolfgang Bangerth,

2

PETSc può essere facilmente utilizzato con Fortran e la documentazione / esempi sono abbastanza buoni.

I trilinos per me sembravano confusi (con tutti i suoi sotto-pacchetti e schema di denominazione) e il supporto di Fortran era imprevedibile (almeno quando l'ho guardato qualche anno fa).

Esistono due modi per interagire con Trilinos di Fortran: (1) passare i dati grezzi in un wrapper C ++ che rende tutte le chiamate ai pacchetti Trilinos per i tuoi [tali wrapper esistono per diversi pacchetti] o (2) utilizzare le nuove interfacce ForTrilinos in modo pesante esercitare le funzionalità orientate agli oggetti di Fortran 2003. La maggior parte delle funzionalità richieste da ForTrilinos sono disponibili nella maggior parte dei compilatori. le implementazioni del compilatore di queste funzionalità sono errate ma stanno rapidamente migliorando. ForTrilinos attualmente costruisce con i compilatori IBM e NAG. Le versioni attuali o future dei compilatori del gruppo Cray, Intel e Portland supportano tutte nominalmente le funzionalità necessarie per la correzione dei bug del modulo. La prossima versione di GCC 4.7.0 avrà tutte le funzionalità necessarie tranne una, quindi il supporto completo del compilatore non è troppo lontano in futuro.

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.