SparseLibrary  Version 1.6.0
Public Member Functions | Static Protected Member Functions | Protected Attributes | List of all members
Hilbert< T > Class Template Reference

The Hilbert scheme backed by (C)BICRS. More...

#include <Hilbert.hpp>

Inheritance diagram for Hilbert< T >:
Inheritance graph
[legend]
Collaboration diagram for Hilbert< T >:
Collaboration graph
[legend]

Public Member Functions

virtual ~Hilbert ()
 Base deconstructor. More...
 
 Hilbert ()
 Base constructor. More...
 
 Hilbert (std::string file, T zero=0)
 Base constructor. More...
 
 Hilbert (std::vector< Triplet< T > > &input, ULI m, ULI n, T zero)
 Base constructor. More...
 
virtual void load (std::vector< Triplet< T > > &input, const ULI m, const ULI n, const T zero)
 
virtual void getFirstIndexPair (ULI &row, ULI &col)
 Returns the first nonzero index, per reference. More...
 
virtual void zxa (const T *x, T *z)
 Calculates z=xA. More...
 
virtual void zax (const T *x, T *z)
 Calculates z=Ax. More...
 
virtual size_t bytesUsed ()
 Gets the number of bytes used by this storage scheme. More...
 
void saveBinary (const std::string fn)
 Saves the current Hilbert structure in binary triplet form. More...
 
void loadBinary (const std::string fn)
 Loads from binary triplets, assumes Hilbert ordering already done.
 
- Public Member Functions inherited from SparseMatrix< T, ULI >
 SparseMatrix ()
 Base constructor. More...
 
 SparseMatrix (const ULInzs, const ULInr, const ULInc, const T zero)
 Base constructor. More...
 
virtual ~SparseMatrix ()
 Base deconstructor. More...
 
void loadFromFile (const std::string file, const T zero=0)
 Function which loads a matrix from a matrix market file. More...
 
virtual unsigned long int m ()
 Queries the number of rows this matrix contains. More...
 
virtual unsigned long int n ()
 Queries the number of columns this matrix contains. More...
 
virtual unsigned long int nzs ()
 Queries the number of nonzeroes stored in this matrix. More...
 
virtual T * mv (const T *x)
 Calculates and returns z=Ax. More...
 
virtual void zax (const T *__restrict__ x, T *__restrict__ z)=0
 In-place z=Ax function. More...
 
virtual void zxa (const T *__restrict__ x, T *__restrict__ z)=0
 In-place z=xA function. More...
 
- Public Member Functions inherited from Matrix< T >
 Matrix ()
 Base constructor. More...
 
virtual ~Matrix ()
 Base deconstructor. More...
 
virtual void zax (const T *__restrict__ x, T *__restrict__ z, const size_t k, const clockid_t clock_id=0, double *elapsed_time=NULL)
 Wrapper function to call the zax kernel multiple times successively, while timing the duration of the operation. More...
 
template<size_t k>
void ZaX (const T *__restrict__ const *__restrict__ const X, T *__restrict__ const *__restrict__ const Z)
 In-place Z=AX function, where A is m x n, Z = m x k, and X is n x k. More...
 
template<size_t k>
void ZXa (const T *__restrict__ const *__restrict__ const X, T *__restrict__ const *__restrict__ const Z)
 In-place Z=XA function, where A is m x n, Z = k x n, and X is k x m. More...
 
virtual void zxa (const T *__restrict__ x, T *__restrict__ z, const unsigned long int repeat, const clockid_t clock_id=0, double *elapsed_time=NULL)
 Wrapper function to call the zxa kernel multiple times successively, while timing the operation duration. More...
 

Static Protected Member Functions

static Matrix< T > * getDataStructure (std::vector< Triplet< T > > &tds, const ULI m, const ULI n, T zero)
 Gets the data structure. More...
 

Protected Attributes

ULI minexp
 Minimum number of expansions.
 
std::vector< HilbertTriplet< T > > ds
 Vector storing the non-zeros and their locations. More...
 
Matrix< T > * ads
 Actual data structure. More...
 
- Protected Attributes inherited from SparseMatrix< T, ULI >
ULI nor
 Number of rows. More...
 
ULI noc
 Number of columns.
 
ULI nnz
 Number of non-zeros. More...
 

Additional Inherited Members

- Public Attributes inherited from SparseMatrix< T, ULI >
zero_element
 The element considered to be zero. More...
 

Detailed Description

template<typename T>
class Hilbert< T >

The Hilbert scheme backed by (C)BICRS.

In effect similar to the Hilbert Triplet scheme (HTS), but uses BICRS to store the nonzeroes.

Constructor & Destructor Documentation

template<typename T>
virtual Hilbert< T >::~Hilbert ( )
inlinevirtual

Base deconstructor.

References Hilbert< T >::ads.

template<typename T>
Hilbert< T >::Hilbert ( )
inline

Base constructor.

References Hilbert< T >::ads.

template<typename T>
Hilbert< T >::Hilbert ( std::string  file,
zero = 0 
)
inline

Base constructor.

Will read in from Matrix Market file.

See also
SparseMatrix::SparseMatrix( file, zero )

References Hilbert< T >::ads, and SparseMatrix< T, ULI >::loadFromFile().

template<typename T>
Hilbert< T >::Hilbert ( std::vector< Triplet< T > > &  input,
ULI  m,
ULI  n,
zero 
)
inline

Base constructor.

Warning: the zero parameter is currently NOT USED!

Parameters
inputRaw input of normal triplets.
mTotal number of rows.
nTotal number of columns.
zeroWhat elements is considered to-be zero.

References Hilbert< T >::ads, and Hilbert< T >::load().

Member Function Documentation

template<typename T>
virtual size_t Hilbert< T >::bytesUsed ( )
inlinevirtual

Gets the number of bytes used by this storage scheme.

Implements Matrix< T >.

References Hilbert< T >::ads.

template<typename T>
static Matrix< T >* Hilbert< T >::getDataStructure ( std::vector< Triplet< T > > &  tds,
const ULI  m,
const ULI  n,
zero 
)
inlinestaticprotected

Gets the data structure.

Convience function, enables quick changes in Hilbert backing structure.

References CBICRS_factory< _t_value >::getCBICRS(), SparseMatrix< T, ULI >::m(), and SparseMatrix< T, ULI >::n().

Referenced by Hilbert< T >::load(), and Hilbert< T >::loadBinary().

template<typename T>
virtual void Hilbert< T >::getFirstIndexPair ( ULI &  row,
ULI &  col 
)
inlinevirtual

Returns the first nonzero index, per reference.

Implements SparseMatrix< T, ULI >.

References Hilbert< T >::ds.

template<typename T>
virtual void Hilbert< T >::load ( std::vector< Triplet< T > > &  input,
const ULI  m,
const ULI  n,
const T  zero 
)
inlinevirtual
template<typename T>
void Hilbert< T >::saveBinary ( const std::string  fn)
inline

Saves the current Hilbert structure in binary triplet form.

Parameters
fnFilename to save to.
See also
HilbertTriplet< T >::save `

References Hilbert< T >::ds, SparseMatrix< T, ULI >::noc, SparseMatrix< T, ULI >::nor, and HilbertTriplet< T >::save().

template<typename T>
virtual void Hilbert< T >::zax ( const T *  x,
T *  z 
)
inlinevirtual

Calculates z=Ax.

z is not set to 0 at the start of this method!

Parameters
xThe (initialised) input vector.
zThe (initialised) output vector.

References Hilbert< T >::ads.

template<typename T>
virtual void Hilbert< T >::zxa ( const T *  x,
T *  z 
)
inlinevirtual

Calculates z=xA.

z is not set to 0 at the start of this method!

Parameters
xThe (initialised) input vector.
zThe (initialised) output vector.

References Hilbert< T >::ads.

Member Data Documentation

template<typename T>
Matrix< T >* Hilbert< T >::ads
protected
template<typename T>
std::vector< HilbertTriplet< T > > Hilbert< T >::ds
protected

Vector storing the non-zeros and their locations.

Referenced by Hilbert< T >::getFirstIndexPair(), Hilbert< T >::load(), and Hilbert< T >::saveBinary().


The documentation for this class was generated from the following file: