SparseLibrary  Version 1.6.0
Public Member Functions | Protected Attributes | List of all members
BICRS< _t_value, _i_value > Class Template Reference

Bi-directional Incremental Compressed Row Storage scheme. More...

#include <BICRS.hpp>

Inheritance diagram for BICRS< _t_value, _i_value >:
Inheritance graph
[legend]
Collaboration diagram for BICRS< _t_value, _i_value >:
Collaboration graph
[legend]

Public Member Functions

virtual ~BICRS ()
 Base deconstructor. More...
 
 BICRS ()
 Base constructor. More...
 
 BICRS (std::string file, _t_value zero=0)
 Base constructor. More...
 
 BICRS (_i_value *row, _i_value *col, _t_value *val, ULI m, ULI n, ULI nz, _t_value zero)
 Base constructor. More...
 
 BICRS (std::vector< Triplet< _t_value > > &input, ULI m, ULI n, _t_value zero=0)
 Base constructor. More...
 
virtual void load (std::vector< Triplet< _t_value > > &input, ULI m, ULI n, _t_value zero)
 This function will rewrite the std::vector< Triplet > structure to one suitable for the other load function. More...
 
void load (_i_value *row, _i_value *col, _t_value *val, ULI m, ULI n, ULI nz, _t_value zero)
 
virtual void getFirstIndexPair (ULI &row, ULI &col)
 Returns the first nonzero index, per reference. More...
 
virtual void zxa (const _t_value *__restrict__ x_p, _t_value *__restrict__ y_p)
 Calculates y=xA, but does not allocate y itself. More...
 
virtual void zax (const _t_value *__restrict__ x_p, _t_value *__restrict__ y_p)
 Calculates y=Ax, but does not allocate y itself. More...
 
virtual void zax_fb (_t_value *__restrict__ x_f, _t_value *__restrict__ y_f)
 Calculates y=Ax, but does not allocate y itself. More...
 
virtual size_t bytesUsed ()
 Function to query the amount of storage required by this sparse matrix. More...
 
- Public Member Functions inherited from SparseMatrix< _t_value, ULI >
 SparseMatrix ()
 Base constructor. More...
 
 SparseMatrix (const ULInzs, const ULInr, const ULInc, const _t_valuezero)
 Base constructor. More...
 
virtual ~SparseMatrix ()
 Base deconstructor. More...
 
void loadFromFile (const std::string file, const _t_valuezero=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_value * mv (const _t_value *x)
 Calculates and returns z=Ax. More...
 
- Public Member Functions inherited from Matrix< _t_value >
 Matrix ()
 Base constructor. More...
 
virtual ~Matrix ()
 Base deconstructor. More...
 
virtual void zax (const _t_value *__restrict__ x, _t_value *__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...
 
void ZaX (const _t_value *__restrict__ const *__restrict__ const X, _t_value *__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...
 
virtual void zxa (const _t_value *__restrict__ x, _t_value *__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...
 
void ZXa (const _t_value *__restrict__ const *__restrict__ const X, _t_value *__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...
 

Protected Attributes

ULI r_start
 Stores the row start position. More...
 
ULI c_start
 Stores the column start position. More...
 
ULI r_end
 Stores the row end position. More...
 
ULI c_end
 Stores the column end position. More...
 
ULI jumps
 Stores the number of row jumps. More...
 
_i_value * r_inc
 Stores the row jumps; size is at maximum the number of nonzeros. More...
 
_i_value * c_inc
 Stores the column jumps; size is exactly the number of nonzeros. More...
 
_t_value * vals
 Stores the values of the individual nonzeros. More...
 
_i_value ntt
 Caches n times two. More...
 
- Protected Attributes inherited from SparseMatrix< _t_value, 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_value, ULI >
_t_value zero_element
 The element considered to be zero. More...
 

Detailed Description

template<typename _t_value, typename _i_value = LI>
class BICRS< _t_value, _i_value >

Bi-directional Incremental Compressed Row Storage scheme.

Supports jumping back and forward within columns. Supports jumping back and forward between rows. Main storage direction in column-wise. Storage requirements are 2nz plus the number of row jumps required. Many row jumps are disadvantageous to storage as well as speed.

Parameters
_t_valueThe type of the nonzeros in the matrix.

Warning: this class uses assertions! For optimal performance, define the NDEBUG flag (e.g., pass -DNDEBUG as a compiler flag).

Constructor & Destructor Documentation

template<typename _t_value, typename _i_value = LI>
virtual BICRS< _t_value, _i_value >::~BICRS ( )
inlinevirtual
template<typename _t_value, typename _i_value = LI>
BICRS< _t_value, _i_value >::BICRS ( )
inline

Base constructor.

template<typename _t_value, typename _i_value = LI>
BICRS< _t_value, _i_value >::BICRS ( std::string  file,
_t_value  zero = 0 
)
inline

Base constructor.

Will read in from Matrix Market file.

See also
SparseMatrix::SparseMatrix( file, zero )

References SparseMatrix< _t_value, ULI >::loadFromFile().

template<typename _t_value, typename _i_value = LI>
BICRS< _t_value, _i_value >::BICRS ( _i_value *  row,
_i_value *  col,
_t_value *  val,
ULI  m,
ULI  n,
ULI  nz,
_t_value  zero 
)
inline

Base constructor.

Stores triplets in exactly the same order as passed to this constructor.

Parameters
rowThe row numbers of the individual nonzeros.
colThe column numbers of the individual nonzeros.
valThe values of the nonzeros.
mNumber of matrix rows.
nNumber of matrix columns.
nzNumber of nonzeros.
zeroWhich value is to be regarded zero here.

References BICRS< _t_value, _i_value >::load().

template<typename _t_value, typename _i_value = LI>
BICRS< _t_value, _i_value >::BICRS ( std::vector< Triplet< _t_value > > &  input,
ULI  m,
ULI  n,
_t_value  zero = 0 
)
inline

Base constructor.

See also
SparseMatrix::SparseMatrix( input, m, n, zero )

References BICRS< _t_value, _i_value >::load().

Member Function Documentation

template<typename _t_value, typename _i_value = LI>
virtual size_t BICRS< _t_value, _i_value >::bytesUsed ( )
inlinevirtual

Function to query the amount of storage required by this sparse matrix.

Returns
The size of the sparse matrix in bytes.

Implements Matrix< _t_value >.

References BICRS< _t_value, _i_value >::jumps, and SparseMatrix< _t_value, ULI >::nnz.

template<typename _t_value, typename _i_value = LI>
virtual void BICRS< _t_value, _i_value >::getFirstIndexPair ( ULI &  row,
ULI &  col 
)
inlinevirtual

Returns the first nonzero index, per reference.

Implements SparseMatrix< _t_value, ULI >.

References BICRS< _t_value, _i_value >::c_start, and BICRS< _t_value, _i_value >::r_start.

template<typename _t_value, typename _i_value = LI>
virtual void BICRS< _t_value, _i_value >::load ( std::vector< Triplet< _t_value > > &  input,
ULI  m,
ULI  n,
_t_value  zero 
)
inlinevirtual

This function will rewrite the std::vector< Triplet > structure to one suitable for the other load function.

See also
load( row, col, val, m, n, nz )
SparseMatrix::load

Implements SparseMatrix< _t_value, ULI >.

References BICRS< _t_value, _i_value >::vals.

Referenced by BICRS< _t_value, _i_value >::BICRS().

template<typename _t_value, typename _i_value = LI>
void BICRS< _t_value, _i_value >::load ( _i_value *  row,
_i_value *  col,
_t_value *  val,
ULI  m,
ULI  n,
ULI  nz,
_t_value  zero 
)
inline
template<typename _t_value, typename _i_value = LI>
virtual void BICRS< _t_value, _i_value >::zax ( const _t_value *__restrict__  x_p,
_t_value *__restrict__  y_p 
)
inlinevirtual

Calculates y=Ax, but does not allocate y itself.

Parameters
x_pThe input vector should be initialised and of correct measurements.
y_pThe output vector should be preallocated and of size m. Furthermore, y[i]=0 for all i, 0<=i<m.

Implements SparseMatrix< _t_value, ULI >.

References BICRS< _t_value, _i_value >::c_inc, BICRS< _t_value, _i_value >::c_start, SparseMatrix< _t_value, ULI >::nnz, SparseMatrix< _t_value, ULI >::noc, SparseMatrix< _t_value, ULI >::nor, BICRS< _t_value, _i_value >::ntt, BICRS< _t_value, _i_value >::r_inc, BICRS< _t_value, _i_value >::r_start, and BICRS< _t_value, _i_value >::vals.

template<typename _t_value, typename _i_value = LI>
virtual void BICRS< _t_value, _i_value >::zax_fb ( _t_value *__restrict__  x_f,
_t_value *__restrict__  y_f 
)
inlinevirtual

Calculates y=Ax, but does not allocate y itself.

Does a front-to-back Hilbert traversal.

Parameters
x_fThe input vector should be initialised and of correct measurements.
y_fThe output vector should be preallocated and of size m. Furthermore, y[i]=0 for all i, 0<=i<m.

References BICRS< _t_value, _i_value >::c_end, BICRS< _t_value, _i_value >::c_inc, BICRS< _t_value, _i_value >::c_start, BICRS< _t_value, _i_value >::jumps, SparseMatrix< _t_value, ULI >::nnz, SparseMatrix< _t_value, ULI >::noc, SparseMatrix< _t_value, ULI >::nor, BICRS< _t_value, _i_value >::ntt, BICRS< _t_value, _i_value >::r_end, BICRS< _t_value, _i_value >::r_inc, BICRS< _t_value, _i_value >::r_start, and BICRS< _t_value, _i_value >::vals.

template<typename _t_value, typename _i_value = LI>
virtual void BICRS< _t_value, _i_value >::zxa ( const _t_value *__restrict__  x_p,
_t_value *__restrict__  y_p 
)
inlinevirtual

Calculates y=xA, but does not allocate y itself.

Parameters
x_pThe input vector should be initialised and of correct measurements.
y_pThe output vector should be preallocated and of size m. Furthermore, y[i]=0 for all i, 0<=i<m.

Implements SparseMatrix< _t_value, ULI >.

References BICRS< _t_value, _i_value >::c_inc, BICRS< _t_value, _i_value >::c_start, SparseMatrix< _t_value, ULI >::nnz, SparseMatrix< _t_value, ULI >::noc, SparseMatrix< _t_value, ULI >::nor, BICRS< _t_value, _i_value >::ntt, BICRS< _t_value, _i_value >::r_inc, BICRS< _t_value, _i_value >::r_start, and BICRS< _t_value, _i_value >::vals.

Member Data Documentation

template<typename _t_value, typename _i_value = LI>
ULI BICRS< _t_value, _i_value >::c_end
protected

Stores the column end position.

Referenced by BICRS< _t_value, _i_value >::load(), and BICRS< _t_value, _i_value >::zax_fb().

template<typename _t_value, typename _i_value = LI>
_i_value* BICRS< _t_value, _i_value >::c_inc
protected
template<typename _t_value, typename _i_value = LI>
ULI BICRS< _t_value, _i_value >::c_start
protected
template<typename _t_value, typename _i_value = LI>
ULI BICRS< _t_value, _i_value >::jumps
protected
template<typename _t_value, typename _i_value = LI>
_i_value BICRS< _t_value, _i_value >::ntt
protected
template<typename _t_value, typename _i_value = LI>
ULI BICRS< _t_value, _i_value >::r_end
protected

Stores the row end position.

Referenced by BICRS< _t_value, _i_value >::load(), and BICRS< _t_value, _i_value >::zax_fb().

template<typename _t_value, typename _i_value = LI>
_i_value* BICRS< _t_value, _i_value >::r_inc
protected
template<typename _t_value, typename _i_value = LI>
ULI BICRS< _t_value, _i_value >::r_start
protected
template<typename _t_value, typename _i_value = LI>
_t_value* BICRS< _t_value, _i_value >::vals
protected

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