Quelles sont les principales différences entre PETSc et Trilinos?

24

Pour autant que je sache, les deux grands cadres génériques des logiciels de science informatique du Département américain de l'énergie sont PETSc et Trilinos . Ils semblent similaires à première vue, au-delà des différences de langage (C versus C ++). Quelles sont les principales différences entre les deux cadres et quels facteurs devraient influencer le choix de l'un plutôt que l'autre? (Ignorer les préjugés institutionnels et les infrastructures existantes.)

Geoff Oxberry
la source
1
Il y a quelque temps, une discussion quelque peu dépassée (depuis 2009) sur un tableau CFD ; peut-être que la meilleure question à poser est: depuis ce temps, y a-t-il eu des changements importants dans la conception de l'un ou l'autre des packages?
aeismail
Ahmed, cette discussion se concentre principalement sur les préconditionneurs. J'espérais un point de vue plus large que les discussions sur les solveurs itératifs. De plus, comme il y a beaucoup de discussions sur PETSc sur scicomp.SE, j'ai pensé que Trilinos devrait également recevoir des messages, et cela semble être l'une des premières questions qu'un utilisateur potentiel de Trilinos devrait poser. Je ne sais pas grand-chose sur Trilinos ou PETSc, alors j'ai pensé que la réponse m'aiderait à apprendre quelque chose aussi.
Geoff Oxberry

Réponses:

19

Il existe d'énormes différences de culture, de style de codage et de capacités. La différence fondamentale est probablement que Trilinos essaie de fournir un environnement pour résoudre les problèmes FEM et PETSc fournit un environnement pour résoudre les problèmes d'algèbre linéaire clairsemée.

Pourquoi est-ce important?

  • Trilinos fournira un grand nombre de packages concernés par des parties distinctes du solveur FEM. Parfois, ces packages fonctionnent ensemble, parfois non. Même les composants de base sont dans son propre package et des outils C ++ avancés
  • PETSC fournit une petite quantité de routines de base sur lesquelles il est possible de s'appuyer, mais laisse les solveurs FEM à des packages tiers. Pour cette raison, il est associé à une communauté plus large que la FEM. Par exemple, même les solveurs propres sont des tiers, ce qui est sans doute une partie importante de l'algèbre linéaire.
  • En fin de compte, Trilinos se concentre sur le bon fonctionnement de ses propres packages et PETSc a des interfaces qui appellent de nombreux packages de middleware (je l'ai souvent entendu appeler "plus léger" à cause de cela, mais je ne ferais pas cette affirmation)

À mon humble avis, que vous devez utiliser dépend vraiment du problème. Veuillez partager plus de détails pour que nous puissions répondre à cette question.

aterrel
la source
Je n'ai pas de problème spécifique en tête. Je suis intéressé à acquérir de l'expérience avec l'un de ces gros packages pour résoudre les PDE, et je voulais avoir une idée des avantages et des inconvénients afin que je puisse prendre une décision plus éclairée sur lequel investir mon temps.
Geoff Oxberry
11

Si vous souhaitez entendre les pistes techniques de divers packages, répondre aux questions du point de vue d'un utilisateur HPC normal, le podcast RCE de Brock Palen et Jeff Squyres est une excellente ressource. Ils ont des épisodes sur PETSc et sur Trilinos qui sont très clairs.

aterrel a raison dans ses descriptions - PETSc est un ensemble (comparativement) petit, intégré et bien pensé de solveurs linéaires et non linéaires à usage général, que l'on pourrait ensuite utiliser dans un cadre de solveurs; Trilinos est une collection de packages, avec une intégration qui évolue, visant principalement à être ce framework de solveur, et comprend des choses comme les solveurs ODE, les packages de maillage, etc.


la source
7

Permettez-moi d'ajouter au bon commentaire d'Aterrel que Trilinos est vraiment un gros sac de trucs (Sandia) et Petsc est une bibliothèque plus ciblée. Si vous voulez comparer, vous devez comparer la prise en charge du solveur clairsemé de PETSc avec l'écosystème de solveurs clairsemés ePetra / ML / etc de Trilinos, qui font des choses similaires. De plus, PETSc prend en charge les grilles structurées et Sandia a toujours été explicitement une maison non structurée (FEM), donc Trilinos n'a que peu ou pas de support pour les grilles structurées AFAIK. Et Trilinos a des capacités que PETSc ne touche pas comme le support stochastique des PDE.

Adams
la source
3
Eh bien pour ajouter aux choses que Trillinos a que PETSc ne fait pas: différenciation automatique, équilibrage de charge, méthodes de continuation de l'arc, packages d'optimisation. Mais tous ces éléments ont été intégrés à PETSc par des packages tiers (dont certains proviennent de Trilinos) et peuvent être ajoutés avec une configuration PETSc --download-foo.
aterrel
6

En tant que personne qui a passé plusieurs années à travailler avec les deux, mon point de vue est que les deux packages ne sont en fait pas si différents. Certes, ils utilisent différents langages, mais ils l'utilisent de manière très similaire (les deux sont orientés objet, Trilinos fait peu d'autre utilisation du C ++ que l'utilisation des classes). Les deux prennent en charge pratiquement tout ce que vous voudrez jamais faire avec l'algèbre linéaire (soit par le biais de sous-packages ou de choses qu'ils téléchargent à la volée, ce qui, du point de vue de l'utilisateur, ne fait aucune différence). Enfin, les deux ont un bon nombre de sous-packages plus obscurs et probablement peu répandus (par exemple, le tamis de l'interface maillée de PETSc, la différenciation automatique dans Trilinos, etc.).

Pour moi, l'attrait de Trilinos est double: - Le nombre de sous-paquets obscurs dans Trilinos est beaucoup plus grand; si jamais j'ai besoin de quelque chose dans la direction X, je vais le trouver dans Trilinos et cela fonctionnera avec le reste de mon code. - Trilinos est beaucoup plus conservateur dans sa stratégie de développement. PETSc renomme les choses tout le temps et chaque version nécessite que les utilisateurs rattrapent les fonctions renommées, les différentes bibliothèques, etc.

Wolfgang Bangerth
la source
Je suppose que vous n'avez utilisé que les anciennes interfaces, car la plupart des plus récentes utilisent largement des modèles.
aterrel
C'est surtout vrai. J'imagine que vous avez commenté la déclaration "peu d'autre utilisation de C ++ au-delà des classes". Ce que je voulais dire, c'est qu'il n'utilise pas RTTI, les exceptions, l'héritage multiple, etc., dans la plupart des endroits. Il est relativement simple de comprendre si vous connaissez C et un peu d'orientation d'objet.
Wolfgang Bangerth,
2

PETSc peut très facilement être utilisé avec Fortran et la documentation / les exemples sont assez bons.

Trilinos m'a semblé déroutant (avec tous ses sous-packages et son schéma de nommage) et le support de Fortran était inégal (du moins quand je l'ai regardé il y a quelques années).

Il y a deux façons d'interagir avec Trilinos de Fortran: (1) passer des données brutes dans un wrapper C ++ qui fait tous les appels aux packages Trilinos pour vos [ces wrappers existent pour plusieurs packages] ou (2) utiliser les nouvelles interfaces ForTrilinos qui exercer les fonctionnalités orientées objet de Fortran 2003. La plupart des fonctionnalités requises par ForTrilinos sont disponibles dans la plupart des compilateurs. les implémentations du compilateur de ces fonctionnalités sont boguées mais s'améliorent rapidement. ForTrilinos construit actuellement avec les compilateurs IBM et NAG. Les versions actuelles ou à venir des compilateurs Cray, Intel et Portland Group prennent toutes en charge les correctifs de bogues modulo des fonctionnalités requises. La prochaine version de GCC 4.7.0 aura toutes les fonctionnalités requises sauf une, donc la prise en charge étendue du compilateur ne sera pas trop loin à l'avenir.

stali
la source