|
SparseLibrary
Version 1.6.0
|
The Bisection Hilbert triplet scheme. More...
#include <BisectionHilbert.hpp>


Public Member Functions | |
| virtual | ~BisectionHilbert () |
| Base deconstructor. More... | |
| BisectionHilbert () | |
| Base constructor. More... | |
| BisectionHilbert (std::string file, T zero=0) | |
| Base constructor. More... | |
| BisectionHilbert (std::vector< Triplet< T > > &input, unsigned long int m, unsigned long int n, T zero) | |
| Base constructor. More... | |
Public Member Functions inherited from BlockHilbert< T > | |
| virtual | ~BlockHilbert () |
| Base deconstructor. More... | |
| BlockHilbert () | |
| Base constructor. More... | |
| BlockHilbert (std::string file, T zero=0, char bisect=0) | |
| Base constructor. More... | |
| BlockHilbert (std::vector< Triplet< T > > &input, LI m, LI n, T zero) | |
| Base constructor. More... | |
| BlockHilbert (std::vector< Triplet< T > > &input, LI m, LI n, char bisect, T zero) | |
| Base constructor. More... | |
| virtual void | load (std::vector< Triplet< T > > &input, const LI m, const LI n, const T zero) |
| virtual void | getFirstIndexPair (LI &row, LI &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 () |
| Function to query the amount of storage required by this sparse matrix. More... | |
Public Member Functions inherited from SparseMatrix< T, LI > | |
| SparseMatrix () | |
| Base constructor. More... | |
| SparseMatrix (const LInzs, const LInr, const LInc, 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... | |
Additional Inherited Members | |
Public Attributes inherited from SparseMatrix< T, LI > | |
| T | zero_element |
| The element considered to be zero. More... | |
Protected Member Functions inherited from BlockHilbert< T > | |
| char | bisect (std::vector< HilbertTriplet< std::vector< Triplet< T > > > > &build, std::vector< Triplet< T > > &input, const unsigned long int blocki, const unsigned long int blockj, const unsigned char depth) |
| Recursive bisection, leaf case. More... | |
| void | bisect (std::vector< HilbertTriplet< std::vector< Triplet< T > > > > &build) |
| Automatically performs recursive bisection on the input nonzeroes to achieve sparse blocking. More... | |
| std::vector< HilbertTriplet < std::vector< Triplet< T > > > > | buildBisectionBlocks (std::vector< Triplet< T > > &input) |
| Builds block array by bisection. More... | |
|
std::vector< HilbertTriplet < std::vector< Triplet< T > > > > | buildBlocks (std::vector< Triplet< T > > &input) |
| Builds block array by ordering them in fixed-size sparse submatrices. | |
| bool | cmp (HilbertTriplet< std::vector< Triplet< T > > > &left, HilbertTriplet< std::vector< Triplet< T > > > &right) |
| HilbertCoordinate comparison function. More... | |
| unsigned long int | find (HilbertTriplet< std::vector< Triplet< T > > > &x, ULI &left, ULI &right, ULI &minexp) |
| Binary search for finding a given triplet in a given range. More... | |
Protected Attributes inherited from BlockHilbert< T > | |
| char | bisection |
| Whether we use fixed block grid or a bisection-based grid. | |
| ULI | minexp |
| Minimum number of expansions. | |
|
std::vector< HilbertTriplet < std::vector< Triplet< T > > > > | hilbert |
| Vector storing the block indices and their Hilbert coordinates. | |
| HBICRS< T > * | ds |
| The actual data structure. | |
Protected Attributes inherited from SparseMatrix< T, LI > | |
| LI | nor |
| Number of rows. More... | |
| LI | noc |
| Number of columns. | |
| LI | nnz |
| Number of non-zeros. More... | |
Static Protected Attributes inherited from BlockHilbert< T > | |
| static const ULI | BLOCK_M = 2048 |
| Minimum number of rows in a block. | |
| static const ULI | BLOCK_N = 2048 |
| Minimum number of columns in a block. | |
| static const ULI | MAX_BLOCKS = 1024*128 |
| Maximum number of blocks. | |
| static const ULI | MAX_DEPTH = 64 |
| Maximum depth of bisection. More... | |
| static const signed char | DS = 2 |
| Which data structure to use for each block. More... | |
The Bisection Hilbert triplet scheme.
In effect similar to (HierarchicalBICRS), but uses Hilbert coordinates to determine the order of the blocks, and a bisection algorithm to construct the individual blocks. Wraps around the BisectionHilbert class which already implements this scheme.
|
inlinevirtual |
Base deconstructor.
|
inline |
Base constructor.
References BlockHilbert< T >::bisection.
|
inline |
Base constructor.
Will read in from Matrix Market file.
| file | The input filename. |
| zero | What is considered zero for this sparse matrix instance. |
References BlockHilbert< T >::bisection, and SparseMatrix< T, LI >::loadFromFile().
|
inline |
Base constructor.
Warning: the zero parameter is currently NOT USED!
| input | Raw input of normal triplets. |
| m | Total number of rows. |
| n | Total number of columns. |
| zero | What elements is considered to-be zero. |
References BlockHilbert< T >::bisection, and BlockHilbert< T >::load().
1.8.7