SparseLibrary
Version 1.6.0
|
Compressed Bi-directional Incremental Compressed Row Storage (BICRS) scheme. More...
#include <CBICRS.hpp>
Public Member Functions | |
virtual | ~CBICRS () |
Base deconstructor. More... | |
CBICRS () | |
Base constructor. More... | |
CBICRS (std::string file, _t_value zero=0) | |
Base constructor. More... | |
CBICRS (ULI *row, ULI *col, _t_value *val, ULI m, ULI n, ULI nz, _t_value zero) | |
Base constructor. More... | |
CBICRS (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 (ULI *row, ULI *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 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... | |
Static Public Member Functions | |
static unsigned long int | getMemoryUsage (ULI *row, ULI *col, const ULI nz, const ULI m, const ULI n) |
Calculates and returns the number of bytes used when employing this data structure. More... | |
static unsigned long int | getMemoryUsage (std::vector< Triplet< _t_value > > &input, const ULI m, const ULI n) |
Calculates and returns the number of bytes used when employing this data structure. More... | |
Static Protected Member Functions | |
static void | getNumberOfOverflows (const ULI nnz, ULI *const row, ULI *const col, const ULI ntt, ULI &row_overflows, ULI &col_overflows, ULI &sim_overflows, ULI &jumps) |
Calculates the number of overflows given a triplet-form input. More... | |
static unsigned long int | memoryUsage (const ULI nnz, const ULI jumps, const ULI row_o, const ULI col_o, const ULI sim_o) |
Estimates the number of bytes required by this data structure. More... | |
Protected Attributes | |
_master_i_value * | r_start |
Stores the row chunk start increments; size is the number of nonzeros plus one. More... | |
_master_i_value * | c_start |
Stores the column chunk start increments; size is the number of nonzeros plus one. More... | |
_i_value * | r_inc |
Stores the row jumps; size is the number of nonzeros plus 2. More... | |
_i_value * | c_inc |
Stores the column jumps; size is exactly the number of nonzeros. More... | |
unsigned char * | mask1 |
Bitmask used for switching between c_start and c_ind. More... | |
unsigned char * | mask2 |
Bitmask used for switching between r_start and r_ind. More... | |
_t_value * | vals |
Stores the values of the individual nonzeros. More... | |
size_t | bytes |
Stores the number of bytes used for storage. More... | |
_master_j_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... | |
Compressed Bi-directional Incremental Compressed Row Storage (BICRS) scheme.
Compression is done by using less large data types for storing increments; e.g., 8-bit signed chars instead of 64-bit signed long ints. The exact data type used are input parameters.
Refer to CBICRS_factory for an auto-tuned selection.
_t_value | The 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).
|
inlinevirtual |
Base deconstructor.
References CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::c_inc, CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::c_start, CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::mask1, CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::mask2, CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::r_inc, CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::r_start, and CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::vals.
|
inline |
Base constructor.
References CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::c_inc, CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::c_start, CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::mask1, CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::mask2, CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::r_inc, CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::r_start, and CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::vals.
|
inline |
Base constructor.
Will read in from Matrix Market file.
References SparseMatrix< _t_value, ULI >::loadFromFile().
|
inline |
Base constructor.
Stores triplets in exactly the same order as passed to this constructor.
row | The row numbers of the individual nonzeros. |
col | The column numbers of the individual nonzeros. |
val | The values of the nonzeros. |
m | Number of matrix rows. |
n | Number of matrix columns. |
nz | Number of nonzeros. |
zero | Which value is to be regarded zero here. |
References CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::load().
|
inline |
Base constructor.
References CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::load().
|
inlinevirtual |
Function to query the amount of storage required by this sparse matrix.
Implements Matrix< _t_value >.
References CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::bytes.
|
inlinevirtual |
Returns the first nonzero index, per reference.
Implements SparseMatrix< _t_value, ULI >.
References CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::c_start, and CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::r_start.
|
inlinestatic |
Calculates and returns the number of bytes used when employing this data structure.
References CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::getNumberOfOverflows(), and CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::memoryUsage().
Referenced by CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::getMemoryUsage(), CBICRS_factory< _t_value >::investigate(), and CBICRS_factory< _t_value >::investigateCCS().
|
inlinestatic |
Calculates and returns the number of bytes used when employing this data structure.
References CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::getMemoryUsage().
|
inlinestaticprotected |
Calculates the number of overflows given a triplet-form input.
nnz | The number of nonzeroes in the COO input. |
row | The COO row indices array. |
col | The COO column indices array. |
ntt | Should equal the number of columns times two (n times two) |
row_overflows | Where to store the number of row overflows. |
col_overflows | Where to store the number of column overflows. |
sim_overflows | Where to store the number of simultaneous row and column overflows. |
jumps | Where to store the number of row jumps; |
References SparseMatrix< _t_value, ULI >::nnz.
Referenced by CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::getMemoryUsage(), and CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::load().
|
inlinevirtual |
This function will rewrite the std::vector< Triplet > structure to one suitable for the other load function.
Implements SparseMatrix< _t_value, ULI >.
Referenced by CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::CBICRS().
|
inline |
References CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::bytes, CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::c_inc, CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::c_start, CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::getNumberOfOverflows(), SparseMatrix< _t_value, ULI >::m(), CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::mask1, CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::mask2, CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::memoryUsage(), SparseMatrix< _t_value, ULI >::n(), SparseMatrix< _t_value, ULI >::nnz, SparseMatrix< _t_value, ULI >::noc, SparseMatrix< _t_value, ULI >::nor, CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::ntt, CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::r_inc, CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::r_start, CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::vals, and SparseMatrix< _t_value, ULI >::zero_element.
|
inlinestaticprotected |
Estimates the number of bytes required by this data structure.
Referenced by CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::getMemoryUsage(), and CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::load().
|
inlinevirtual |
Calculates y=Ax, but does not allocate y itself.
x_p | The input vector should be initialised and of correct measurements. |
y_p | The 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 CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::c_inc, CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::c_start, CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::mask1, CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::mask2, SparseMatrix< _t_value, ULI >::nnz, SparseMatrix< _t_value, ULI >::noc, SparseMatrix< _t_value, ULI >::nor, CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::ntt, CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::r_inc, CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::r_start, and CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::vals.
|
inlinevirtual |
Calculates y=xA, but does not allocate y itself.
x_p | The input vector should be initialised and of correct measurements. |
y_p | The 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 CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::c_inc, CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::c_start, CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::mask1, CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::mask2, SparseMatrix< _t_value, ULI >::nnz, SparseMatrix< _t_value, ULI >::noc, SparseMatrix< _t_value, ULI >::nor, CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::ntt, CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::r_inc, CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::r_start, and CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::vals.
|
protected |
Stores the number of bytes used for storage.
Referenced by CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::bytesUsed(), and CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::load().
|
protected |
Stores the column jumps; size is exactly the number of nonzeros.
Referenced by CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::CBICRS(), CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::load(), CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::zax(), CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::zxa(), and CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::~CBICRS().
|
protected |
Stores the column chunk start increments; size is the number of nonzeros plus one.
Referenced by CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::CBICRS(), CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::getFirstIndexPair(), CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::load(), CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::zax(), CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::zxa(), and CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::~CBICRS().
|
protected |
Bitmask used for switching between c_start and c_ind.
Referenced by CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::CBICRS(), CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::load(), CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::zax(), CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::zxa(), and CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::~CBICRS().
|
protected |
Bitmask used for switching between r_start and r_ind.
Referenced by CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::CBICRS(), CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::load(), CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::zax(), CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::zxa(), and CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::~CBICRS().
|
protected |
|
protected |
Stores the row jumps; size is the number of nonzeros plus 2.
Referenced by CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::CBICRS(), CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::load(), CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::zax(), CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::zxa(), and CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::~CBICRS().
|
protected |
Stores the row chunk start increments; size is the number of nonzeros plus one.
Referenced by CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::CBICRS(), CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::getFirstIndexPair(), CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::load(), CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::zax(), CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::zxa(), and CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::~CBICRS().
|
protected |
Stores the values of the individual nonzeros.
Size is exactly the number of nonzeros.
Referenced by CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::CBICRS(), CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::load(), CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::zax(), CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::zxa(), and CBICRS< _t_value, _master_i_value, _master_j_value, _i_value, _j_value >::~CBICRS().