Trilinos provides a large collection of classes and tools for the construction, redistribution and use of distributed data objects such as vectors, multivectors (a collection of vectors with the same size, shape and distribution) matrices and graphs. These classes are intended for efficient basic linear algebra computations on desktop platforms all the way to the very largest supercomputers. Trilinos capabilities for scalable linear algebra are embodied in several packages:
  • Epetra: Epetra is the primary data package for most Trilinos users. Epetra contains classes for constructing distributed sparse and dense matrices, dense vectors, matrix graphs and more. It also provides object-oriented C++ wrappers to the standard BLAS and LAPACK functions for distributed serial computations. Epetra also provides a flexible and powerful data redistribution capability that enable very sophisticated load balancing capabilities and scalable implementations of many complex linear algebra algorithms without the user needing any special knowledge about distributed object. Epetra provides a parallel machine interface that allows users to write generate parallel functionality without specifically using any particular parallel library. Specifically, although MPI is the most commonly used parallel machine interface for Trilinos, Epetra's abstract class Epetra_Comm makes Trilinos independent of MPI except for the explicit Epetra_MpiComm adapter class. Although Epetra is comprehensive in some ways, it provides support for only double precision floating point data and 32-bit integer indexing. Epetra will remain a critical package for Trilinos, but future efforts are focused on three other packages that provide data services for a broader set of problems.
  • Teuchos: The Teuchos (pronounced tef-hos) package is fundamentally a tools package. One set of tools it provides is a more flexible interface to the standard BLAS and LAPACK libraries. Teuchos also provides a parallel machine abstraction similar to Epetra. Teuchos was the first Trilinos data package to support templated types for floating point and integer data.
  • Tpetra: Presently active development in scalable data class is going on in the Tpetra package. Tpetra is intended to be the functional equivalent to Epetra. Tpetra's object oriented design is nearly identical to Epetra. The big difference is that Tpetra supports template floating point (Scalar) and integer (Ordinal) data, for which double and int are special cases. The original Epetra classes (then called Petra) where intended to support templated data, but our assessments determined that templates were not robust and portable at the time (circa 2000) so we split our efforts into the Epetra package (which grew rapidly, was very robust and easy-to-use) and Tpetra (which grew more slowly and gave us a package for experimenting with new ideas). Tpetra is now ready for broad use, as C++ has matured and templates features are robustly implemented in most compilers. Tpetra is also the package where all new multicore technology is being developed.
  • Kokkos: Trilinos parallel machine support is now expanding to including a network of multicore nodes. The Kokkos package is designed to support multicore computations and is heavily used by Tpetra. The functionality in Kokkos is not part of Tpetra because it is possible to use Kokkos independent of Tpetra. In addition to basic serial and shared memory parallel kernels, Kokkos also provides an abstract node API that will provide users with generic programming capabilities for a variety of concrete node types such as Pthreads, OpenMP, Intel Thread Building Blocks and CUDA.
It is worth mentioning a final package called Thyra that provides generic access to linear operators and vectors and can wrap many of the classes in the packages listed above. The Trilinos project is committed to providing scalable linear algebra capabilities from the desktop to the very high end. We will also provide access to emerging architecture capabilities. Furthermore, with the new capabilities based on templates, Trilinos data classes enable mixed precision and arbitrary precision computations on scalable systems. This first-of-a-kind capability will provide a new capability for robust computations.