PARALUTION  1.0.0
PARALUTION
host_matrix_csr.hpp
Go to the documentation of this file.
1 #ifndef PARALUTION_HOST_MATRIX_CSR_HPP_
2 #define PARALUTION_HOST_MATRIX_CSR_HPP_
3 
4 #include "../base_vector.hpp"
5 #include "../base_matrix.hpp"
6 #include "../matrix_formats.hpp"
7 
8 namespace paralution {
9 
10 template <typename ValueType>
11 class HostMatrixCSR : public HostMatrix<ValueType> {
12 
13 public:
14 
15  HostMatrixCSR();
16  HostMatrixCSR(const Paralution_Backend_Descriptor local_backend);
17  virtual ~HostMatrixCSR();
18 
19  virtual void info(void) const;
20  virtual unsigned int get_mat_format(void) const { return CSR; }
21 
22  virtual bool Check(void) const;
23  virtual void AllocateCSR(const int nnz, const int nrow, const int ncol);
24  virtual void SetDataPtrCSR(int **row_offset, int **col, ValueType **val,
25  const int nnz, const int nrow, const int ncol);
26  virtual void LeaveDataPtrCSR(int **row_offset, int **col, ValueType **val);
27 
28  virtual void Clear(void);
29  virtual bool Zeros(void);
30 
31  virtual bool Assemble(const int *i, const int *j, const ValueType *v,
32  const int size, const int n, const int m,
33  int **pp_assembly_rank,
34  int **pp_assembly_irank,
35  int **pp_assembly_loop_start,
36  int **pp_assembly_loop_end,
37  int &nThreads);
38  virtual bool AssembleUpdate(const ValueType *v,
39  const int *assembly_rank,
40  const int *assembly_irank,
41  const int *assembly_loop_start,
42  const int *assembly_loop_end,
43  const int nThreads);
44 
45  virtual bool Scale(const ValueType alpha);
46  virtual bool ScaleDiagonal(const ValueType alpha);
47  virtual bool ScaleOffDiagonal(const ValueType alpha);
48  virtual bool AddScalar(const ValueType alpha);
49  virtual bool AddScalarDiagonal(const ValueType alpha);
50  virtual bool AddScalarOffDiagonal(const ValueType alpha);
51 
52  virtual bool ExtractSubMatrix(const int row_offset,
53  const int col_offset,
54  const int row_size,
55  const int col_size,
56  BaseMatrix<ValueType> *mat) const;
57 
58  virtual bool ExtractDiagonal(BaseVector<ValueType> *vec_diag) const;
59  virtual bool ExtractInverseDiagonal(BaseVector<ValueType> *vec_inv_diag) const;
60  virtual bool ExtractU(BaseMatrix<ValueType> *U) const;
61  virtual bool ExtractUDiagonal(BaseMatrix<ValueType> *U) const;
62  virtual bool ExtractL(BaseMatrix<ValueType> *L) const;
63  virtual bool ExtractLDiagonal(BaseMatrix<ValueType> *L) const;
64 
65  virtual bool MultiColoring(int &num_colors,
66  int **size_colors,
67  BaseVector<int> *permutation) const;
68 
69  virtual bool MaximalIndependentSet(int &size,
70  BaseVector<int> *permutation) const;
71 
72  virtual bool ZeroBlockPermutation(int &size, BaseVector<int> *permutation) const;
73 
74 
75  virtual bool SymbolicPower(const int p);
76 
77  virtual bool SymbolicMatMatMult(const BaseMatrix<ValueType> &src);
78  virtual bool MatMatMult(const BaseMatrix<ValueType> &A, const BaseMatrix<ValueType> &B);
79  virtual bool SymbolicMatMatMult(const BaseMatrix<ValueType> &A, const BaseMatrix<ValueType> &B);
80  virtual bool NumericMatMatMult(const BaseMatrix<ValueType> &A, const BaseMatrix<ValueType> &B);
81 
82  virtual bool DiagonalMatrixMultR(const BaseVector<ValueType> &diag);
83  virtual bool DiagonalMatrixMultL(const BaseVector<ValueType> &diag);
84 
85  virtual bool MatrixAdd(const BaseMatrix<ValueType> &mat, const ValueType alpha,
86  const ValueType beta, const bool structure);
87 
88  virtual bool Permute(const BaseVector<int> &permutation);
89 
90  virtual bool CMK(BaseVector<int> *permutation) const;
91  virtual bool RCMK(BaseVector<int> *permutation) const;
92 
93  virtual bool ConvertFrom(const BaseMatrix<ValueType> &mat);
94 
95  virtual void CopyFrom(const BaseMatrix<ValueType> &mat);
96 
97  virtual void CopyFromCSR(const int *row_offsets, const int *col, const ValueType *val);
98  virtual void CopyToCSR(int *row_offsets, int *col, ValueType *val) const;
99 
100  virtual void CopyTo(BaseMatrix<ValueType> *mat) const;
101 
102  virtual bool ReadFileCSR(const std::string);
103  virtual bool WriteFileCSR(const std::string) const;
104 
105  virtual bool CreateFromMap(const BaseVector<int> &map, const int n, const int m);
106 
107  virtual bool ICFactorize(BaseVector<ValueType> *inv_diag);
108 
109  virtual bool ILU0Factorize(void);
110  virtual bool ILUpFactorizeNumeric(const int p, const BaseMatrix<ValueType> &mat);
111  virtual bool ILUTFactorize(const double t, const int maxrow);
112 
113  virtual void LUAnalyse(void);
114  virtual void LUAnalyseClear(void);
115  virtual bool LUSolve(const BaseVector<ValueType> &in, BaseVector<ValueType> *out) const;
116 
117  virtual void LLAnalyse(void);
118  virtual void LLAnalyseClear(void);
119  virtual bool LLSolve(const BaseVector<ValueType> &in, BaseVector<ValueType> *out) const;
120  virtual bool LLSolve(const BaseVector<ValueType> &in, const BaseVector<ValueType> &inv_diag,
121  BaseVector<ValueType> *out) const;
122 
123  virtual void LAnalyse(const bool diag_unit=false);
124  virtual void LAnalyseClear(void);
125  virtual bool LSolve(const BaseVector<ValueType> &in, BaseVector<ValueType> *out) const;
126 
127  virtual void UAnalyse(const bool diag_unit=false);
128  virtual void UAnalyseClear(void);
129  virtual bool USolve(const BaseVector<ValueType> &in, BaseVector<ValueType> *out) const;
130 
131 
132  virtual bool Gershgorin(ValueType &lambda_min,
133  ValueType &lambda_max) const;
134 
135  virtual void Apply(const BaseVector<ValueType> &in, BaseVector<ValueType> *out) const;
136  virtual void ApplyAdd(const BaseVector<ValueType> &in, const ValueType scalar,
137  BaseVector<ValueType> *out) const;
138 
139  virtual bool Compress(const double drop_off);
140  virtual bool Transpose(void);
141  virtual bool Sort(void);
142 
143  virtual bool ReplaceColumnVector(const int idx, const BaseVector<ValueType> &vec);
144  virtual bool ExtractColumnVector(const int idx, BaseVector<ValueType> *vec) const;
145 
146  virtual bool ReplaceRowVector(const int idx, const BaseVector<ValueType> &vec);
147  virtual bool ExtractRowVector(const int idx, BaseVector<ValueType> *vec) const;
148 
149  virtual bool AMGConnect(const ValueType eps, BaseVector<int> *connections) const;
150  virtual bool AMGAggregate(const BaseVector<int> &connections, BaseVector<int> *aggregates) const;
151  virtual bool AMGSmoothedAggregation(const ValueType relax,
152  const BaseVector<int> &aggregates,
153  const BaseVector<int> &connections,
154  BaseMatrix<ValueType> *prolong,
155  BaseMatrix<ValueType> *restrict) const;
156  virtual bool AMGAggregation(const BaseVector<int> &aggregates,
157  BaseMatrix<ValueType> *prolong,
158  BaseMatrix<ValueType> *restrict) const;
159 
160  virtual bool FSAI(const int power, const BaseMatrix<ValueType> *pattern);
161  virtual bool SPAI(void);
162 
163 private:
164 
166 
167  friend class BaseVector<ValueType>;
168  friend class HostVector<ValueType>;
169  friend class HostMatrixCOO<ValueType>;
170  friend class HostMatrixDIA<ValueType>;
171  friend class HostMatrixELL<ValueType>;
172  friend class HostMatrixHYB<ValueType>;
173  friend class HostMatrixDENSE<ValueType>;
174  friend class HostMatrixMCSR<ValueType>;
175  friend class HostMatrixBCSR<ValueType>;
176 
177  friend class GPUAcceleratorMatrixCSR<ValueType>;
178  friend class OCLAcceleratorMatrixCSR<ValueType>;
179  friend class MICAcceleratorMatrixCSR<ValueType>;
180 
181 #ifdef SUPPORT_MKL
182 
183  ValueType *mkl_tmp_vec_;
184 
185 #endif
186 
189 
190 };
191 
192 
193 }
194 
195 #endif // PARALUTION_HOST_MATRIX_CSR_HPP_
A
Definition: pcg_example.m:10
virtual bool ILUTFactorize(const double t, const int maxrow)
Perform ILU(t,m) factorization based on threshold and maximum number of elements per row...
Definition: host_matrix_csr.cpp:1562
virtual bool ExtractLDiagonal(BaseMatrix< ValueType > *L) const
Extract the lower triangular matrix including diagonal.
Definition: host_matrix_csr.cpp:986
virtual bool Compress(const double drop_off)
Delete all entries abs(a_ij) <= drop_off; the diagonal elements are never deleted.
Definition: host_matrix_csr.cpp:2820
virtual void CopyTo(BaseMatrix< ValueType > *mat) const
Copy to another matrix.
Definition: host_matrix_csr.cpp:384
virtual bool ExtractU(BaseMatrix< ValueType > *U) const
Extract the upper triangular matrix.
Definition: host_matrix_csr.cpp:839
IndexType i
Definition: cuda_kernels_coo.hpp:195
virtual void Clear(void)
Clear (free) the matrix.
Definition: host_matrix_csr.cpp:83
virtual bool Zeros(void)
Set all the values to zero.
Definition: host_matrix_csr.cpp:107
Definition: base_matrix.hpp:24
virtual bool Check(void) const
Definition: host_matrix_csr.cpp:125
virtual bool RCMK(BaseVector< int > *permutation) const
Create permutation vector for reverse CMK reordering of the matrix.
Definition: host_matrix_csr.cpp:3168
virtual bool ExtractUDiagonal(BaseMatrix< ValueType > *U) const
Extract the upper triangular matrix including diagonal.
Definition: host_matrix_csr.cpp:888
virtual unsigned int get_mat_format(void) const
Return the matrix format id (see matrix_formats.hpp)
Definition: host_matrix_csr.hpp:20
virtual bool AddScalar(const ValueType alpha)
Add alpha to all values.
Definition: host_matrix_csr.cpp:2733
virtual bool Scale(const ValueType alpha)
Scale all values.
Definition: host_matrix_csr.cpp:2688
const IndexType idx
Definition: cuda_kernels_coo.hpp:115
virtual bool AddScalarDiagonal(const ValueType alpha)
Add alpha to the diagonal entries of the matrix.
Definition: host_matrix_csr.cpp:2747
virtual bool ReplaceRowVector(const int idx, const BaseVector< ValueType > &vec)
Replace a column vector of a matrix.
Definition: host_matrix_csr.cpp:4397
virtual bool AMGSmoothedAggregation(const ValueType relax, const BaseVector< int > &aggregates, const BaseVector< int > &connections, BaseMatrix< ValueType > *prolong, BaseMatrix< ValueType > *restrict) const
Definition: host_matrix_csr.cpp:3390
virtual bool ConvertFrom(const BaseMatrix< ValueType > &mat)
Convert the matrix from another matrix (with different structure)
Definition: host_matrix_csr.cpp:445
virtual void LAnalyse(const bool diag_unit=false)
Analyse the structure (level-scheduling) L-part diag_unit == true the diag is 1; diag_unit == false t...
Definition: host_matrix_csr.cpp:1372
virtual void LLAnalyse(void)
Analyse the structure (level-scheduling)
Definition: host_matrix_csr.cpp:1262
virtual bool ILUpFactorizeNumeric(const int p, const BaseMatrix< ValueType > &mat)
Perform ILU(p) factorization based on power (see power(q)-pattern method, D. Lukarski "Parallel Spars...
Definition: host_matrix_csr.cpp:2388
virtual bool AMGConnect(const ValueType eps, BaseVector< int > *connections) const
Definition: host_matrix_csr.cpp:3254
virtual bool MultiColoring(int &num_colors, int **size_colors, BaseVector< int > *permutation) const
Perform multi-coloring decomposition of the matrix; Returns number of colors, the corresponding sizes...
Definition: host_matrix_csr.cpp:1823
Definition: base_matrix.hpp:26
virtual bool ExtractDiagonal(BaseVector< ValueType > *vec_diag) const
Extract the diagonal values of the matrix into a LocalVector.
Definition: host_matrix_csr.cpp:725
virtual void LAnalyseClear(void)
Delete the analysed data (see LAnalyse) L-party.
Definition: host_matrix_csr.cpp:1379
nnz
Definition: pcg_example.m:8
virtual bool ICFactorize(BaseVector< ValueType > *inv_diag)
Perform IC(0) factorization.
Definition: host_matrix_csr.cpp:1780
virtual bool ScaleOffDiagonal(const ValueType alpha)
Scale the off-diagonal entries of the matrix with alpha.
Definition: host_matrix_csr.cpp:2718
end if j
Definition: pcg_example.m:22
const IndexType const IndexType const IndexType const ValueType const ValueType scalar
Definition: cuda_kernels_coo.hpp:91
virtual void CopyFrom(const BaseMatrix< ValueType > &mat)
Copy from another matrix.
Definition: host_matrix_csr.cpp:343
MatrixCSR< ValueType, int > mat_
Definition: host_matrix_csr.hpp:165
Definition: base_matrix.hpp:28
virtual void LeaveDataPtrCSR(int **row_offset, int **col, ValueType **val)
Leave a CSR matrix to Host pointers.
Definition: host_matrix_csr.cpp:273
Definition: base_matrix.hpp:74
virtual bool CreateFromMap(const BaseVector< int > &map, const int n, const int m)
Create a restriction matrix operator based on an int vector map.
Definition: host_matrix_csr.cpp:3190
Definition: base_vector.hpp:10
virtual bool ExtractInverseDiagonal(BaseVector< ValueType > *vec_inv_diag) const
Extract the inverse (reciprocal) diagonal values of the matrix into a LocalVector.
Definition: host_matrix_csr.cpp:751
virtual bool MaximalIndependentSet(int &size, BaseVector< int > *permutation) const
Perform maximal independent set decomposition of the matrix; Returns the size of the maximal independ...
Definition: host_matrix_csr.cpp:1894
bool U_diag_unit_
Definition: host_matrix_csr.hpp:188
virtual bool SymbolicMatMatMult(const BaseMatrix< ValueType > &src)
Perform symbolic matrix-matrix multiplication (i.e. determine the structure), this = this*src...
Definition: host_matrix_csr.cpp:2003
void power(const int mic_dev, const int size, const double val, ValueType *vec)
Definition: mic_vector_kernel.cpp:241
virtual bool Gershgorin(ValueType &lambda_min, ValueType &lambda_max) const
Compute the spectrum approximation with Gershgorin circles theorem.
Definition: host_matrix_csr.cpp:2651
virtual bool ILU0Factorize(void)
Perform ILU(0) factorization.
Definition: host_matrix_csr.cpp:1490
virtual bool USolve(const BaseVector< ValueType > &in, BaseVector< ValueType > *out) const
Solve U out = in; if level-scheduling algorithm is provided then the graph traversing is performed in...
Definition: host_matrix_csr.cpp:1445
virtual void SetDataPtrCSR(int **row_offset, int **col, ValueType **val, const int nnz, const int nrow, const int ncol)
Initialize a CSR matrix on the Host with externally allocated data.
Definition: host_matrix_csr.cpp:250
virtual bool MatrixAdd(const BaseMatrix< ValueType > &mat, const ValueType alpha, const ValueType beta, const bool structure)
Perform matrix addition, this = alpha*this + beta*mat; if structure==false the structure of the matri...
Definition: host_matrix_csr.cpp:2531
virtual bool NumericMatMatMult(const BaseMatrix< ValueType > &A, const BaseMatrix< ValueType > &B)
Perform numerical matrix-matrix multiplication (i.e. value computation), this = A*B.
Definition: host_matrix_csr.cpp:2277
HostMatrixCSR()
Definition: host_matrix_csr.cpp:44
virtual void LUAnalyseClear(void)
Delete the analysed data (see LUAnalyse)
Definition: host_matrix_csr.cpp:1277
virtual void CopyFromCSR(const int *row_offsets, const int *col, const ValueType *val)
Copy from CSR array (the matrix has to be allocated)
Definition: host_matrix_csr.cpp:295
virtual ~HostMatrixCSR()
Definition: host_matrix_csr.cpp:73
virtual bool CMK(BaseVector< int > *permutation) const
Create permutation vector for CMK reordering of the matrix.
Definition: host_matrix_csr.cpp:3056
virtual bool ExtractRowVector(const int idx, BaseVector< ValueType > *vec) const
Extract values from a row of a matrix to a vector.
Definition: host_matrix_csr.cpp:4499
virtual bool DiagonalMatrixMultL(const BaseVector< ValueType > &diag)
Multiply the matrix with diagonal matrix (stored in LocalVector), this=diag*this (left multiplication...
Definition: host_matrix_csr.cpp:2800
bool L_diag_unit_
Definition: host_matrix_csr.hpp:187
Definition: base_matrix.hpp:20
Definition: base_matrix.hpp:22
virtual void CopyToCSR(int *row_offsets, int *col, ValueType *val) const
Copy to CSR array (the arrays have to be allocated)
Definition: host_matrix_csr.cpp:319
virtual bool SymbolicPower(const int p)
Perform symbolic computation (structure only) of |this|^p.
Definition: host_matrix_csr.cpp:2322
virtual bool Permute(const BaseVector< int > &permutation)
Perform (forward) permutation of the matrix.
Definition: host_matrix_csr.cpp:2953
Base class for all host/accelerator matrices.
Definition: base_matrix.hpp:92
virtual void Apply(const BaseVector< ValueType > &in, BaseVector< ValueType > *out) const
Apply the matrix to vector, out = this*in;.
Definition: host_matrix_csr.cpp:664
virtual void UAnalyseClear(void)
Delete the analysed data (see UAnalyse) U-party.
Definition: host_matrix_csr.cpp:1438
virtual void LUAnalyse(void)
Analyse the structure (level-scheduling)
Definition: host_matrix_csr.cpp:1272
virtual bool Sort(void)
Sort the matrix indices.
Definition: host_matrix_csr.cpp:2925
Definition: base_matrix.hpp:16
Definition: backend_manager.cpp:43
Definition: base_matrix.hpp:55
virtual bool AssembleUpdate(const ValueType *v, const int *assembly_rank, const int *assembly_irank, const int *assembly_loop_start, const int *assembly_loop_end, const int nThreads)
Definition: host_matrix_csr.cpp:4209
virtual bool ScaleDiagonal(const ValueType alpha)
Scale the diagonal entries of the matrix with alpha.
Definition: host_matrix_csr.cpp:2701
virtual bool ExtractSubMatrix(const int row_offset, const int col_offset, const int row_size, const int col_size, BaseMatrix< ValueType > *mat) const
Extrat a sub-matrix with row/col_offset and row/col_size.
Definition: host_matrix_csr.cpp:777
virtual bool ExtractL(BaseMatrix< ValueType > *L) const
Extract the lower triangular matrix.
Definition: host_matrix_csr.cpp:937
virtual bool AMGAggregation(const BaseVector< int > &aggregates, BaseMatrix< ValueType > *prolong, BaseMatrix< ValueType > *restrict) const
Definition: host_matrix_csr.cpp:3549
virtual bool LLSolve(const BaseVector< ValueType > &in, BaseVector< ValueType > *out) const
Solve LL^T out = in; if level-scheduling algorithm is provided then the graph.
Definition: host_matrix_csr.cpp:1282
virtual bool LSolve(const BaseVector< ValueType > &in, BaseVector< ValueType > *out) const
Solve L out = in; if level-scheduling algorithm is provided then the graph traversing is performed in...
Definition: host_matrix_csr.cpp:1386
Definition: matrix_formats.hpp:21
virtual bool Transpose(void)
Transpose the matrix.
Definition: host_matrix_csr.cpp:2878
virtual bool DiagonalMatrixMultR(const BaseVector< ValueType > &diag)
Multiply the matrix with diagonal matrix (stored in LocalVector), this=this*diag (right multiplicatio...
Definition: host_matrix_csr.cpp:2780
virtual bool SPAI(void)
SParse Approximate Inverse assembly for given system matrix pattern.
Definition: host_matrix_csr.cpp:3730
virtual bool FSAI(const int power, const BaseMatrix< ValueType > *pattern)
Factorized Sparse Approximate Inverse assembly for given system matrix power pattern or external spar...
Definition: host_matrix_csr.cpp:3613
virtual bool AddScalarOffDiagonal(const ValueType alpha)
Add alpha to the off-diagonal entries of the matrix.
Definition: host_matrix_csr.cpp:2764
virtual bool AMGAggregate(const BaseVector< int > &connections, BaseVector< int > *aggregates) const
Definition: host_matrix_csr.cpp:3302
virtual void ApplyAdd(const BaseVector< ValueType > &in, const ValueType scalar, BaseVector< ValueType > *out) const
Apply and add the matrix to vector, out = out + scalar*this*in;.
Definition: host_matrix_csr.cpp:698
virtual bool MatMatMult(const BaseMatrix< ValueType > &A, const BaseMatrix< ValueType > &B)
Multiply two matrices, this = A * B.
Definition: host_matrix_csr.cpp:2081
virtual bool LUSolve(const BaseVector< ValueType > &in, BaseVector< ValueType > *out) const
Solve LU out = in; if level-scheduling algorithm is provided then the graph traversing is performed i...
Definition: host_matrix_csr.cpp:1205
Base class for all host/accelerator vectors.
Definition: base_vector.hpp:26
virtual bool ZeroBlockPermutation(int &size, BaseVector< int > *permutation) const
Return a permutation for saddle-point problems (zero diagonal entries), where all zero diagonal eleme...
Definition: host_matrix_csr.cpp:1957
virtual void LLAnalyseClear(void)
Delete the analysed data (see LLAnalyse)
Definition: host_matrix_csr.cpp:1267
virtual void UAnalyse(const bool diag_unit=false)
Analyse the structure (level-scheduling) U-part; diag_unit == true the diag is 1; diag_unit == false ...
Definition: host_matrix_csr.cpp:1431
virtual bool ExtractColumnVector(const int idx, BaseVector< ValueType > *vec) const
Extract values from a column of a matrix to a vector.
Definition: host_matrix_csr.cpp:4361
virtual bool Assemble(const int *i, const int *j, const ValueType *v, const int size, const int n, const int m, int **pp_assembly_rank, int **pp_assembly_irank, int **pp_assembly_loop_start, int **pp_assembly_loop_end, int &nThreads)
Assembling.
Definition: host_matrix_csr.cpp:3823
virtual void AllocateCSR(const int nnz, const int nrow, const int ncol)
Allocate CSR Matrix.
Definition: host_matrix_csr.cpp:218
virtual bool ReplaceColumnVector(const int idx, const BaseVector< ValueType > &vec)
Replace a column vector of a matrix.
Definition: host_matrix_csr.cpp:4267
virtual bool WriteFileCSR(const std::string) const
Write matrix to CSR (PARALUTION binary format) file.
Definition: host_matrix_csr.cpp:423
virtual bool ReadFileCSR(const std::string)
Read matrix from CSR (PARALUTION binary format) file.
Definition: host_matrix_csr.cpp:391
virtual void info(void) const
Shows simple info about the object.
Definition: host_matrix_csr.cpp:117
Definition: base_matrix.hpp:18
Definition: base_matrix.hpp:36