¿Cuáles son las principales diferencias entre PETSc y Trilinos?

24

Por lo que puedo decir, los dos grandes marcos genéricos de software de ciencia computacional del Departamento de Energía de EE . UU . Son PETSc y Trilinos . Parecen similares a primera vista, más allá de las diferencias en el lenguaje (C versus C ++). ¿Cuáles son las principales diferencias entre los dos marcos y qué factores deberían influir en la elección de uno sobre el otro? (Ignore el sesgo institucional y la infraestructura existente).

Geoff Oxberry
fuente
1
Hubo una discusión un tanto desactualizada (desde 2009) en una junta de CFD hace un tiempo; quizás la mejor pregunta es: desde entonces, ¿ha habido cambios significativos en el diseño de cualquiera de los paquetes?
aeismail
Ahmed, esa discusión se centra principalmente en los preacondicionadores. Esperaba un punto de vista más amplio que las discusiones sobre solucionadores iterativos. Además, dado que se habla mucho sobre PETSc en scicomp.SE, pensé que Trilinos debería recibir algunas publicaciones dedicadas a él también, y esta parece ser una de las primeras preguntas que un posible usuario de Trilinos debería hacer. No sé mucho sobre Trilinos o PETSc, así que pensé que la respuesta también me ayudaría a aprender algo.
Geoff Oxberry

Respuestas:

19

Existen grandes diferencias en la cultura, el estilo de codificación y las capacidades. Probablemente la diferencia fundamental es que Trilinos intenta proporcionar un entorno para resolver problemas de FEM y PETSc proporciona un entorno para resolver problemas de álgebra lineal dispersos.

¿Por qué es eso significativo?

  • Trilinos proporcionará una gran cantidad de paquetes relacionados con partes separadas del solucionador FEM. Algunas veces estos paquetes funcionan juntos, otras veces no. Incluso los componentes base están en su propio paquete y herramientas avanzadas de C ++
  • PETSC proporciona una pequeña cantidad de rutinas básicas sobre las que se puede construir, pero deja los solucionadores de FEM a paquetes de terceros. Debido a esto, está asociado con una comunidad más grande que solo FEM. Por ejemplo, incluso los solucionadores propios son de terceros, lo que podría decirse que es una parte importante del álgebra lineal.
  • En pocas palabras, Trilinos se enfoca en trabajar bien dentro de sus propios paquetes y PETSc tiene interfaces que llaman a muchos paquetes de middleware (a menudo he escuchado que se llama "más liviano" debido a esto, pero no haría esa afirmación)

En mi humilde opinión, lo que debe utilizar realmente depende del problema. Por favor, comparta más detalles para que podamos responder esa pregunta.

aterrel
fuente
No tengo un problema específico en mente. Estoy interesado en adquirir experiencia con uno de esos grandes paquetes para resolver PDEs, y quería tener una idea de los pros y los contras para poder tomar una decisión más informada sobre en qué invertir mi tiempo.
Geoff Oxberry
11

Si desea saber de los líderes técnicos de varios paquetes, tomar preguntas desde el punto de vista de un usuario normal de HPC, el podcast RCE de Brock Palen y Jeff Squyres es un excelente recurso. Tienen episodios en PETSc y en Trilinos que son muy claros.

aterrel tiene razón en sus descripciones: PETSc es un paquete (comparativamente) pequeño, integrado y bien pensado de solucionadores lineales y algunos no lineales de uso general, que luego se podría usar en un marco de solución; Trilinos es una colección de paquetes, con una integración que está evolucionando, principalmente dirigida a ser ese marco de solución e incluye cosas como solucionadores de ODE, paquetes de mallas, etc.


fuente
7

Permítanme agregar al buen comentario de aterrel que Trilinos es realmente una gran bolsa de cosas (de Sandia) y Petsc es una biblioteca más enfocada. Si desea comparar, debe comparar el soporte de solución dispersa de PETSc con el ecosistema de solución dispersa ePetra / ML / etc de Trilinos, que hace cosas similares. Además, PETSc admite cuadrículas estructuradas y Sandia históricamente ha sido explícitamente una casa no estructurada (FEM), por lo que Trilinos tiene poco o ningún soporte para las redes estructuradas AFAIK. Y Trilinos tiene capacidades que PETSc no toca como el soporte de PDE estocástico.

Adams
fuente
3
Bueno, para agregar a las cosas que tiene Trillinos que PETSc no tiene: diferenciación automática, equilibrio de carga, métodos de continuación de arco, paquetes de optimización. Pero todos estos han sido integrados en PETSc por paquetes de terceros (algunos de los cuales son de Trilinos) y se pueden agregar con una configuración PETSc --download-foo.
aterrel
6

Como alguien que ha pasado varios años trabajando con ambos, mi perspectiva es que ambos paquetes no son realmente tan diferentes. Es cierto que usan diferentes lenguajes, pero lo usan de manera muy similar (ambos están orientados a objetos, Trilinos hace poco otro uso de C ++ más allá del uso de clases). Ambos admiten prácticamente todo lo que querrá hacer con álgebra lineal (ya sea a través de subpaquetes o cosas que descargan sobre la marcha, que desde la perspectiva del usuario no hace ninguna diferencia). Finalmente, ambos tienen un buen número de subpaquetes más oscuros y probablemente no muy utilizados (por ejemplo, 'tamiz' de interfaz de malla de PETSc, diferenciación automática en Trilinos, etc.).

Para mí, el atractivo de Trilinos es doble: - El número de subpaquetes oscuros en Trilinos es mucho mayor; Si alguna vez necesito algo en la dirección X, lo encontraré en Trilinos y funcionará con el resto de mi código. - Trilinos es mucho más conservador en su estrategia de desarrollo. PETSc cambia el nombre de las cosas todo el tiempo y cada lanzamiento requiere que los usuarios se pongan al día con las funciones renombradas, diferentes bibliotecas, etc.

Wolfgang Bangerth
fuente
Supongo que solo ha usado las interfaces más antiguas, ya que muchas de las más nuevas usan plantillas ampliamente.
aterrel
Eso es mayormente cierto. Me imagino que comentaste sobre la declaración "poco uso de C ++ más allá de las clases". Lo que quise decir es que no usa RTTI, excepciones, herencia múltiple, etc., en la mayoría de los lugares. Es relativamente sencillo de entender si conoce C y un poco de orientación a objetos.
Wolfgang Bangerth
2

PETSc se puede usar muy fácilmente con Fortran y la documentación / ejemplos son bastante buenos.

Para mí, Trilinos parecía confuso (con todos sus subpaquetes y esquema de nombres) y el soporte de Fortran era irregular (al menos cuando lo vi hace unos años).

Hay dos formas de interactuar con Trilinos de Fortran: (1) pasar datos sin procesar a un contenedor C ++ que hace que todas las llamadas a paquetes Trilinos para su [tales contenedores existen para varios paquetes] o (2) use las nuevas interfaces ForTrilinos con mucha frecuencia ejercite las funciones orientadas a objetos de Fortran 2003. La mayoría de las funciones que requiere ForTrilinos están disponibles en la mayoría de los compiladores. Las implementaciones del compilador de estas características tienen errores pero están mejorando rápidamente. ForTrilinos actualmente construye con los compiladores IBM y NAG. Las versiones actuales o futuras de los compiladores de Cray, Intel y Portland Group son compatibles nominalmente con las características necesarias para la corrección de errores del módulo. La próxima versión de GCC 4.7.0 tendrá todas las características requeridas, excepto una, por lo que el amplio soporte del compilador no está demasiado lejos en el futuro.

stali
fuente