Kokkos::SparseOperation< OrdinalType, ScalarType > Class Template Reference

Kokkos::SparseOperation: A virtual class that defines the interface for sparse matrix operations. More...

#include <Kokkos_SparseOperation.hpp>

Inheritance diagram for Kokkos::SparseOperation< OrdinalType, ScalarType >:

[legend]
Collaboration diagram for Kokkos::SparseOperation< OrdinalType, ScalarType >:
[legend]
List of all members.

Public Member Functions

Constructors/Destructor.
 SparseOperation ()
 SparseOperation Constructor.
virtual ~SparseOperation ()
 SparseOperation Destructor.
Abstract Kokkos::CisMatrix Interface Initialization Methods
virtual int initializeStructure (const CisMatrix< OrdinalType, ScalarType > &A, bool willKeepStructure)=0
 Initialize structure of matrix.
virtual int initializeValues (const CisMatrix< OrdinalType, ScalarType > &A, bool willKeepValues, bool checkStructure)=0
 Initialize values of matrix.
Computational methods.
virtual int apply (const Vector< OrdinalType, ScalarType > &x, Vector< OrdinalType, ScalarType > &y, bool transA, bool conjA) const =0
 Returns the result of a Kokkos_SparseOperation multiplied by a vector x in y.
virtual int apply (const MultiVector< OrdinalType, ScalarType > &x, MultiVector< OrdinalType, ScalarType > &y, bool transA, bool conjA) const =0
 Returns the result of a Kokkos_SparseOperation multiplied by multiple vectors in x, results in y.
Operator attribute access methods.
virtual bool getCanUseStructure () const =0
 Returns true if this implementation of Kokkos::SparseOperation can benefit from the user keeping the passed in structure.
virtual bool getCanUseValues () const =0
 Returns true if this implementation of Kokkos::SparseOperation can benefit from the user keeping the passed in values.
virtual const CisMatrix< OrdinalType,
ScalarType > & 
getMatrix () const =0
 Returns a reference to the most recent Kokkos::CisMatrix that was passed into the this object.
virtual const Permutation<
OrdinalType, ScalarType > & 
getLeftPermutation () const =0
 Returns a reference to the left Kokkos::Permutation object.
virtual const Permutation<
OrdinalType, ScalarType > & 
getRightPermutation () const =0
 Returns a reference to the right Kokkos::Permutation object, which is the identity for this implementation.

Detailed Description

template<typename OrdinalType, typename ScalarType>
class Kokkos::SparseOperation< OrdinalType, ScalarType >

Kokkos::SparseOperation: A virtual class that defines the interface for sparse matrix operations.

The Kokkos::SparseOperation specifies the basic functionality that any Kokkos sparse operation must satisfy. This class is templated on the ordinal (integer) and scalar (floating point) types, so it can interface with any reasonable data type.

Constructing Kokkos::SparseOperation objects

Constructing Kokkos::SparseOperation objects is a multi-step process. The basic steps are as follows:

  1. Create Kokkos::SparseOperation instance: There are several classes that implement this interface. The constructor from one of these classes must be called. However, once constructed, any of these objected can be treated from thence on as a member of the Kokkos::SparseOperation base class.
  2. Register the structure of a Kokkos::CisMatrix object using initializeStructure(): We provide this method so that derived implementations can take advantage of multiple problems that have the same structure. In this situation, initializeStructure() would be called once and then initializeValues() would be called repeatedly, amortizing the cost of setting up the structure. This method may be called only once.
  3. Register the values of a Kokkos::CisMatrix object using initializeValues(): This method is used to pass values to the multiply class. It can be called repeatedly if multiple matrices have the same structure.

Counting Floating Point Operations

Each Kokkos::SparseOperation object keeps track of the number of floating point operations performed using the specified object as the this argument to the function. The getFlops() function returns this number as a double precision number. Using this information, in conjunction with the Kokkos::Time class, one can get accurate performance numbers. The resetFlops() function resets the floating point counter.


Member Function Documentation

template<typename OrdinalType, typename ScalarType>
virtual int Kokkos::SparseOperation< OrdinalType, ScalarType >::apply const MultiVector< OrdinalType, ScalarType > &  x,
MultiVector< OrdinalType, ScalarType > &  y,
bool  transA,
bool  conjA
const [pure virtual]
 

Returns the result of a Kokkos_SparseOperation multiplied by multiple vectors in x, results in y.

Parameters:
x (In) A Kokkos::MultiVector to operate on.
y (Out) A Kokkos::MultiVector containing results.
transA (In) If true, apply the transpose of matrix, otherwise just use matrix.
conjA (In) If true, apply the conjugate of matrix values, otherwise just use matrix values.
Returns:
Integer error code, set to 0 if successful.

Implemented in Kokkos::BaseSparseMultiply< OrdinalType, ScalarType >, Kokkos::BaseSparseSolve< OrdinalType, ScalarType >, Kokkos::OskiSparseMultiply< OrdinalType, ScalarType >, and Kokkos::PackedSparseMultiply< OrdinalType, ScalarType >.

template<typename OrdinalType, typename ScalarType>
virtual int Kokkos::SparseOperation< OrdinalType, ScalarType >::apply const Vector< OrdinalType, ScalarType > &  x,
Vector< OrdinalType, ScalarType > &  y,
bool  transA,
bool  conjA
const [pure virtual]
 

Returns the result of a Kokkos_SparseOperation multiplied by a vector x in y.

Parameters:
x (In) A Kokkos::Vector to operate on.
y (Out) A Kokkos::Vector containing results.
transA (In) If true, apply the transpose of matrix, otherwise just use matrix.
conjA (In) If true, applythe conjugate of matrix values, otherwise just use matrix values.
Returns:
Integer error code, set to 0 if successful.

Implemented in Kokkos::BaseSparseMultiply< OrdinalType, ScalarType >, Kokkos::BaseSparseSolve< OrdinalType, ScalarType >, Kokkos::OskiSparseMultiply< OrdinalType, ScalarType >, and Kokkos::PackedSparseMultiply< OrdinalType, ScalarType >.

template<typename OrdinalType, typename ScalarType>
virtual bool Kokkos::SparseOperation< OrdinalType, ScalarType >::getCanUseStructure  )  const [pure virtual]
 

Returns true if this implementation of Kokkos::SparseOperation can benefit from the user keeping the passed in structure.

Some implementations of optimized kernels do not rely on the user's data except for the initial analysis of structure. Other implementations, in order to reduce memory requirements, may find it beneficial to rely on the user's data. Since it is very possible that the user would retain this data anyway, we want to allow for this possibility. This method is related to the willKeepStructure parameter passed in to the initializeStructure() method.

Implemented in Kokkos::BaseSparseMultiply< OrdinalType, ScalarType >, Kokkos::BaseSparseSolve< OrdinalType, ScalarType >, Kokkos::OskiSparseMultiply< OrdinalType, ScalarType >, and Kokkos::PackedSparseMultiply< OrdinalType, ScalarType >.

template<typename OrdinalType, typename ScalarType>
virtual bool Kokkos::SparseOperation< OrdinalType, ScalarType >::getCanUseValues  )  const [pure virtual]
 

Returns true if this implementation of Kokkos::SparseOperation can benefit from the user keeping the passed in values.

Some implementations of optimized kernels do not rely on the user's data except for the initial copying of values. Other implementations, in order to reduce memory requirements, may find it beneficial to rely on the user's data. Since it is very possible that the user would retain this data anyway, we want to allow for this possibility. This method is related to the willKeepValues parameter passed in to the initializeValues() method.

Implemented in Kokkos::BaseSparseMultiply< OrdinalType, ScalarType >, Kokkos::BaseSparseSolve< OrdinalType, ScalarType >, Kokkos::OskiSparseMultiply< OrdinalType, ScalarType >, and Kokkos::PackedSparseMultiply< OrdinalType, ScalarType >.

template<typename OrdinalType, typename ScalarType>
virtual int Kokkos::SparseOperation< OrdinalType, ScalarType >::initializeStructure const CisMatrix< OrdinalType, ScalarType > &  A,
bool  willKeepStructure
[pure virtual]
 

Initialize structure of matrix.

This interface supports matrices that implement the Kokkos::CisMatrix matrix interface.

Parameters:
A (In) An instance of a class that implements the Kokkos::CisMatrix. All necessary information about the matrix can be obtained via this interface.
willKeepStructure (In) If set to true, the user is asserting that the strucuture of the matrix, as defined in the getIndices() method of the CisMatrix object A will be kept. Specifically, the pointer to an array of indices returned for each i in that method will continue to point to valid index data.
Returns:
Integer error code, set to 0 if successful.

Implemented in Kokkos::BaseSparseMultiply< OrdinalType, ScalarType >, Kokkos::BaseSparseSolve< OrdinalType, ScalarType >, Kokkos::OskiSparseMultiply< OrdinalType, ScalarType >, and Kokkos::PackedSparseMultiply< OrdinalType, ScalarType >.

template<typename OrdinalType, typename ScalarType>
virtual int Kokkos::SparseOperation< OrdinalType, ScalarType >::initializeValues const CisMatrix< OrdinalType, ScalarType > &  A,
bool  willKeepValues,
bool  checkStructure
[pure virtual]
 

Initialize values of matrix.

This interface supports matrices that implement the Kokkos::CisMatrix matrix interface

Parameters:
A (In) An instance of a class that implements the Kokkos::CisMatrix. All necessary information about the matrix can be obtained via this interface.
willKeepValues (In) If set to true, the user is asserting that the strucuture of the matrix, as defined in the getIndices() method of the CisMatrix object A will be kept. Specifically, the pointer to an array of indices returned for each i in that method will continue to point to valid index data
checkStructure (In) If set to true, the structure of A will be checked against the structure of the matrix passed in to the initializeStructure() methods.
Returns:
Integer error code, set to 0 if successful, returns - 1 if checkStructure is true and structure is changed.

Implemented in Kokkos::BaseSparseMultiply< OrdinalType, ScalarType >, Kokkos::BaseSparseSolve< OrdinalType, ScalarType >, Kokkos::OskiSparseMultiply< OrdinalType, ScalarType >, and Kokkos::PackedSparseMultiply< OrdinalType, ScalarType >.


The documentation for this class was generated from the following file:
Generated on Thu Sep 18 12:37:00 2008 for Kokkos by doxygen 1.3.9.1