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.)
24
Antworten:
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?
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.
quelle
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
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.
quelle
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.
quelle
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.
quelle