Template Class SparseMatrix

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 traits = Sparse_Traits<Props...>
using sp_type = typename traits::sp_type
using size_type = typename traits::size_type
using ordinal_type = typename traits::ordinal_type
using value_type = typename traits::value_type
using backend_type = typename traits::backend_type
using format_type = typename traits::format_type
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>类型输出