Template Class SparseMatrix
Defined in File sparse_matrix.hpp
Class Documentation
-
template<typename ...Props>
class ChipSum::Numeric::SparseMatrix 稀疏矩阵用户接口
- 模板参数
ScalarType – 元素的数据类型,一般为浮点数或者整数。 暂时不支持内置的Scalar和complex类型
OrdinalType – 行、列所用的整数描述类型。一般来说单 节点的行数和列数不会比行邻接表大,常见情况是小很多。 所以在这里我参考Trilinos对他们的整型描述符进行了 参数分离
SizeType – Row Map在可能会很大,甚至比行、列大很多 。(参考Trilinos)
SpFormat – 稀疏矩阵的类型。可以参考sparse_matrix_types.h
BackendType – 后端类型。参考ChipSum User Manual
Public Types
-
using vector_type = Vector<value_type, backend_type>
-
using dense_type = DenseMatrix<value_type, backend_type>
Public Functions
-
SparseMatrix() = default
该不该delete掉?
-
template<typename ...Args>
inline CHIPSUM_DECLARED_FUNCTION SparseMatrix(ordinal_type nrow, ordinal_type ncol, size_type annz, Args... args) SparseMatrix 稀疏矩阵模板。SpFormat表示稀疏矩阵的储存格式,至少会支持CSC/CSR/COO,后续会添加一些新的后端。
- 参数
nrow – 行数
ncol – 列数
annz – 非零元数
args – 稀疏矩阵所需的其他数据
- inline CHIPSUM_FUNCTION_INLINE sp_type & GetData ()
GetData 获取后端类型数据
- 返回
后端类型数据
- inline CHIPSUM_FUNCTION_INLINE ordinal_type GetColNum ()
GetColNum 获取列数
- 返回
列数
- inline CHIPSUM_FUNCTION_INLINE ordinal_type GetRowNum ()
GetRowNum 获取行数
- 返回
行数
- inline CHIPSUM_FUNCTION_INLINE size_type GetNNZ ()
GetNNZ 获取非零元数
- 返回
非零元数
- inline CHIPSUM_FUNCTION_INLINE vector_type operator* (vector_type &x)
operator * SpMV operator*版SpMV主要是 方便用户创造结果向量,性能并不 好
- 参数
x – 向量
- 返回
向量(结果)
- inline CHIPSUM_FUNCTION_INLINE dense_type operator* (dense_type &m)
operator * SpMV(稀疏矩阵乘稠密矩阵)
- 参数
m – 稠密矩阵
- 返回
- template<typename V, typename ... Args> inline CHIPSUM_FUNCTION_INLINE void SPMV (V &x, V &y, Args ... args)
SpMV 在需要考虑性能的时候,强烈建议采用此接口进行稀疏矩阵乘向量
- 参数
x – 左端项
y – 右端项
- inline CHIPSUM_FUNCTION_INLINE void Print (std::ostream &out=std::cout)
SpMV 在需要考虑性能的时候,强烈建议采用此接口进行稀疏矩阵乘矩阵
- 参数
x – 左端项
y – 右端项 Print 打印(调试用)
out – 输出流
- inline CHIPSUM_FUNCTION_INLINE void PrintPattern (std::ostream &out=std::cout)
PrintPattern 打印pattern(调试用)
- 参数
out – 输出流
- inline CHIPSUM_FUNCTION_INLINE void SavePatternFig (const char *filename)
SavePatternFig 保存pattern为图片(调试用)
- 参数
filename – 文件名
- inline CHIPSUM_FUNCTION_INLINE void SPGEMM (SparseMatrix &B, SparseMatrix &C)
AKA: Experimental.
Multiply SPGEMM C=A*B 算子有待测试
- 参数
B – [IN]
C – [OUT]
- inline CHIPSUM_FUNCTION_INLINE void SPILU (SparseMatrix &L, SparseMatrix &U, size_type fill_lev=2)
SPILU L*U=A-DETA.
- 参数
L – [OUT] 上三角矩阵
U – [OUT] 下三角矩阵
- inline CHIPSUM_FUNCTION_INLINE void SPADD (SparseMatrix &A, SparseMatrix &B, const bool &isSortRows=false)
SPADD C=A+B.
- 参数
A – [IN] Csr输入
B – [IN] Csr输入
- inline CHIPSUM_FUNCTION_INLINE void SPADD (const value_type &alpha, SparseMatrix &A, const value_type &beta, SparseMatrix &B, const bool &isSortRows=false)
SPADD C=alpha*A+beta*B.
- 参数
A – [IN] Csr输入
B – [IN] Csr输入
isSortRows – [IN] C行重排
- inline CHIPSUM_FUNCTION_INLINE void SPTRSV (vector_type &x, vector_type &b, bool is_lower_tri=false)
Lower or Upper triangular solve: x = L(U) \ b.
- 参数
L/U – [IN] 下/上三角矩阵
x – [OUT] 待求解向量
b – [IN] 乘法系数
is_lower_tri – [IN] 是否下三角矩阵,默认否
- template<typename S> inline CHIPSUM_FUNCTION_INLINE void GetCrsData (std::vector< S > &csr_row_map, std::vector< S > &csr_col_map, std::vector< value_type > &values)
COO矩阵获取CSR格式数据
- 参数
csr_row_map – 行索引,标准库vector类型输出
csr_col_map – 列索引,标准库vector类型输出
csr_col_map – 矩阵值,标准库vector<value_type>类型输出
- inline CHIPSUM_FUNCTION_INLINE void Insert (ordinal_type row, ordinal_type col, value_type value)
COO矩阵插入数据
- 参数
csr_row_map – 行索引,标准库vector类型输出
csr_col_map – 列索引,标准库vector类型输出
csr_col_map – 矩阵值,标准库vector<value_type>类型输出