Was sind die Hauptunterschiede zwischen PETSc und Trilinos?

24

Soweit ich das beurteilen kann, handelt es sich bei den beiden großen generischen IT- Software-Frameworks des US-Energieministeriums um PETSc und Trilinos . Sie scheinen auf den ersten Blick ähnlich zu sein, abgesehen von Sprachunterschieden (C versus C ++). Was sind die Hauptunterschiede zwischen den beiden Frameworks und welche Faktoren sollten die Entscheidung für ein Framework beeinflussen? (Ignorieren Sie institutionelle Voreingenommenheit und vorhandene Infrastruktur.)

Geoff Oxberry
quelle
1
Vor einiger Zeit gab es eine etwas veraltete Diskussion (ab 2009) auf einem CFD-Board ; Die vielleicht bessere Frage ist: Gab es seitdem signifikante Änderungen im Design beider Pakete?
Aeismail
Ahmed, diese Diskussion konzentriert sich hauptsächlich auf Vorkonditionierer. Ich hatte auf einen umfassenderen Standpunkt gehofft als Diskussionen über iterative Löser. Da auf scicomp.SE viel über PETSc geredet wird, dachte ich, dass Trilinos auch einige Posts erhalten sollte, und dies scheint eine der ersten Fragen zu sein, die ein potenzieller Trilinos-Benutzer stellen sollte. Ich weiß nicht viel über Trilinos oder PETSc, daher nahm ich an, dass die Antwort mir auch helfen würde, etwas zu lernen.
Geoff Oxberry

Antworten:

19

Es gibt große Unterschiede in Bezug auf Kultur, Codierungsstil und Fähigkeiten. Wahrscheinlich ist der grundlegende Unterschied, dass Trilinos versucht, eine Umgebung zum Lösen von FEM-Problemen bereitzustellen, und PETSc eine Umgebung zum Lösen von Problemen mit spärlicher linearer Algebra bereitstellt.

Warum ist das so wichtig?

  • Trilinos wird eine große Anzahl von Paketen bereitstellen, die sich mit separaten Teilen des FEM-Lösers befassen. Manchmal funktionieren diese Pakete zusammen, manchmal nicht. Sogar die Basiskomponenten befinden sich in einem eigenen Paket und in fortschrittlichen C ++ - Tools
  • PETSC bietet eine kleine Anzahl von Kernroutinen, auf die aufgebaut werden kann, überlässt die FEM-Löser jedoch Paketen von Drittanbietern. Aus diesem Grund ist es mit einer größeren Community verbunden als nur mit FEM. Zum Beispiel sind sogar die Eigenlöser Dritte, was wohl ein Hauptbestandteil der linearen Algebra ist.
  • Unterm Strich konzentriert sich Trilinos darauf, gut in seinen eigenen Paketen zu arbeiten, und PETSc verfügt über Schnittstellen, die auf viele Middleware-Pakete abzielen (ich habe es deswegen oft als "leichter" bezeichnet, aber das würde ich nicht behaupten).

IMHO, was Sie wirklich verwenden sollten, hängt vom Problem ab. Bitte teilen Sie uns weitere Details mit, damit wir diese Frage beantworten können.

aterrel
quelle
Ich habe kein spezielles Problem im Sinn. Ich bin daran interessiert, Erfahrungen mit einem dieser großen Pakete zur Lösung von PDEs zu sammeln, und wollte mir ein
Bild
11

Wenn Sie von den technischen Leitern verschiedener Pakete hören möchten und Fragen aus der Sicht eines normalen HPC-Benutzers beantworten möchten, ist der RCE-Podcast von Brock Palen und Jeff Squyres eine hervorragende Ressource. Sie haben Episoden auf PETSc und auf Trilinos, die sehr klar sind.

aterrel hat in seinen Beschreibungen recht - PETSc ist ein (vergleichsweise) kleines, integriertes, gut durchdachtes Paket von linearen und einigen nichtlinearen Allzwecklösern, die man dann in einem Solver-Framework verwenden könnte; Trilinos ist eine Sammlung von Paketen mit einer sich entwickelnden Integration, die hauptsächlich darauf abzielt, dieses Solver-Framework zu sein, und Dinge wie ODE-Solver, Meshing-Pakete usw. enthält.


quelle
7

Lassen Sie mich zu Aterrels gutem Kommentar hinzufügen, dass Trilinos wirklich eine große Tüte (Sandia) Zeug ist und Petsc eine fokussiertere Bibliothek ist. Wenn Sie vergleichen möchten, sollten Sie den Sparse-Solver-Support von PETSc mit dem Sparse-Solver-Ökosystem ePetra / ML / etc von Trilinos vergleichen, das ähnliche Aufgaben ausführt. Außerdem unterstützt PETSc strukturierte Gitter, und Sandia war in der Vergangenheit ausdrücklich ein unstrukturiertes Haus (FEM), sodass Trilinos AFAIK für strukturierte Gitter nur wenig oder gar nicht unterstützt. Und Trilinos bietet Funktionen, die PETSc nicht wie stochastische PDE-Unterstützung anspricht.

Adams
quelle
3
Nun zu den Dingen, über die Trillinos verfügt, die PETSc nicht verfügt: Automatische Differenzierung, Lastausgleich, Bogenfortsetzungsmethoden, Optimierungspakete. Alle diese Funktionen wurden von Drittanbieter-Paketen (von denen einige von Trilinos stammen) in PETSc integriert und können mit PETSc --download-foo configure hinzugefügt werden.
Aterrel
6

Als jemand, der mehrere Jahre mit beiden gearbeitet hat, bin ich der Meinung, dass beide Pakete eigentlich gar nicht so unterschiedlich sind. Zwar verwenden sie verschiedene Sprachen, aber sie verwenden sie auf sehr ähnliche Weise (beide sind objektorientiert, Trilinos nutzt C ++ nur wenig anders als Klassen). Beide unterstützen praktisch alles, was Sie jemals mit linearer Algebra machen werden (entweder durch Unterpakete oder Dinge, die sie im laufenden Betrieb herunterladen, was aus Sicht des Benutzers keinen Unterschied macht). Schließlich gibt es in beiden Fällen eine Reihe dunklerer und wahrscheinlich nicht sehr häufig verwendeter Unterpakete (z. B. das PETSc-Netzschnittstellensieb, die automatische Differenzierung in Trilinos usw.).

Für mich ist der Reiz von Trilinos zweifach: - Die Anzahl der undurchsichtigen Unterpakete in Trilinos ist erheblich größer; Wenn ich jemals etwas in Richtung X brauche, werde ich es in Trilinos finden und es wird mit dem Rest meines Codes funktionieren. - Trilinos sind in ihrer Entwicklungsstrategie weitaus konservativer. PETSc benennt Dinge ständig um, und in jeder Version müssen Benutzer über umbenannte Funktionen, verschiedene Bibliotheken usw. informiert werden.

Wolfgang Bangerth
quelle
Ich gehe davon aus, dass Sie nur die älteren Oberflächen verwendet haben, da viele der neueren Vorlagen ausgiebig verwenden.
Aterrel
Das stimmt größtenteils. Ich stelle mir vor, Sie haben die Aussage "Wenig andere Verwendung von C ++ jenseits von Klassen" kommentiert. Was ich damit gemeint habe ist, dass RTTI, Ausnahmen, Mehrfachvererbung usw. an den meisten Orten nicht verwendet werden. Es ist relativ einfach zu verstehen, ob Sie C und ein wenig Objektorientierung kennen.
Wolfgang Bangerth
2

PETSc kann sehr einfach mit Fortran verwendet werden und die Dokumentation / Beispiele sind ziemlich gut.

Trilinos sah für mich verwirrend aus (mit all seinen Unterpaketen und dem Benennungsschema), und die Unterstützung für Fortran war nicht besonders gut (zumindest, als ich es mir vor einigen Jahren ansah).

Es gibt zwei Möglichkeiten, mit Trilinos von Fortran aus zu interagieren: (1) Übergeben Sie Rohdaten an einen C ++ - Wrapper, der alle Aufrufe von Trilinos-Paketen für Ihre [solche Wrapper gibt es für mehrere Pakete] vornimmt, oder (2) Verwenden Sie die neuen ForTrilinos-Schnittstellen, die sehr häufig verwendet werden üben Sie die objektorientierten Funktionen von Fortran 2003 aus. Die meisten Funktionen, die ForTrilinos benötigt, sind in den meisten Compilern verfügbar. Die Compiler-Implementierungen dieser Funktionen sind fehlerhaft, werden aber schnell verbessert. ForTrilinos baut derzeit auf den Compilern IBM und NAG auf. Aktuelle oder in naher Zukunft veröffentlichte Versionen der Compiler von Cray, Intel und Portland Group unterstützen nominell die erforderlichen Modulo-Fehlerkorrekturen. Das kommende GCC 4.7.0-Release wird alle erforderlichen Funktionen mit einer Ausnahme enthalten, sodass eine umfassende Compilerunterstützung in Zukunft nicht allzu weit entfernt ist.

stali
quelle