Trilinos/Kokkos: Core Kernels Package
Development
Kokkos is a collection of the handful of sparse and dense kernels that determine the much of the performance for preconditioned Krylov methods. In particular, it contains function class for sparse matrix vector multiplication and triangular solves, and also for dense kernels that are not part of the standard BLAS.
The classes in this package are written in a way that they can be easily customized via inheritance, replacing only the small sections of code that are unique for a given platform or architectures. In this way we hope to provide optimal implementations of these algorithms for a broad set of platforms from scalar microprocessors to vector multiprocessors.
Kokkos is not intended as a user package, but to be incorporated into other packages that need high performance kernels.
Kokkos contains a number of classes. They can be categorized as follows:
-
Abstract interfaces:
-
Kokkos::CisMatrix class: The base class describing the functionality that Kokkos needs from a sparse matrix object. The Kokkos::HbMatrix is a default implementation.
-
Kokkos::MultiVector class: The base class specifying the interface that any multivector interfacing to Kokkos Operators classes must implement. The Kokkos::DenseMultiVector is the default implementation.
-
Kokkos::Vector class: The base class specifying the interface that any vector class interfacing to the Kokkos Operators classes must implement. At this time, the primary function provided by Kokkos::Vector is access to vector data. The Kokkos::DenseVector is the default implementation.
-
Kokkos::SparseOperation class: A virtual class that defines the interface for sparse matrix operations. Three reference classes implement the Kokkos::SparseOperation base class.
-
Kokkos::BaseSparseMultiply: Provides basic functionality for computing sparse matrix times vector, or sparse matrix times multivector operations.
-
Kokkos::BaseSparseSolve: Provides basic functionality for computing sparse triangular solves with one or more right-hand-side vectors.
-
Kokkos::PackedSparseMultiply: Provides basic functionality for computing sparse matrix times vector, or sparse matrix times multivector operations.
-
Kokkos::Permutation: Specifies the interface that any permutation class which is intended for use with the Kokkos::Vector and Kokkos::MultiVector classes must implement. This class is most important as a way for a Kokkos::SparseOperation object to define a row, column or two-sided permutation of the matrix that presumably improves performance of the sparse operation.
-
Utility classes.
-
Timing class: Kokkos::Time - Provides timing functions for the purposes of performance analysis.
-
Floating point operation class: Kokkos::Flops - Provides floating point operations (FLOPS) counting and reporting functions for the purposes of performance analysis. All Kokkos computational classes accumulate FLOP counts associated with the this object of the computations.
-
Kokkos::CompObject class: Supports the registration of a Kokkos::Flops object with a Kokkos::SparseOperation object.
Kokkos can be used as a stand-alone package. However, it also provides functionality for Epetra and Tpetra.