Template Class DenseMatrix

Class Documentation

template<typename ...Props>
class ChipSum::Numeric::DenseMatrix

Public Types

using traits = DenseMatrix_Traits<Props...>
using matrix_type = typename traits::matrix_type
using matrix_type_ref = typename std::add_lvalue_reference<matrix_type>::type
using const_matrix_type_ref = typename std::add_const<matrix_type_ref>::type
using size_type = typename traits::size_type
using const_size_type = const size_type
using const_size_type_ref = const size_type&
using value_type = typename traits::value_type
using vector_type = ChipSum::Numeric::Vector<Props...>

Public Functions

inline CHIPSUM_DECLARED_FUNCTION DenseMatrix(const_size_type M, const_size_type N)

DenseMatrix 构造一个M行N列的稠密矩阵,该矩阵未初始化

参数
  • M – M 行数

  • N – N 列数

inline CHIPSUM_DECLARED_FUNCTION DenseMatrix(const_size_type M, const_size_type N, value_type *src)

DenseMatrix 构造一个M行N列的稠密矩阵,并用src赋值该矩阵

参数
  • M – M 行数

  • N – N 列数

  • src – 原数据

inline CHIPSUM_FUNCTION_INLINE matrix_type_ref GetData ()

GetData 获取矩阵数据

返回

后端数据

inline CHIPSUM_FUNCTION_INLINE size_type GetRowNum ()

GetRowNum 获取矩阵行数

返回

矩阵行数

inline CHIPSUM_FUNCTION_INLINE size_type GetColNum ()

GetColNum 获取矩阵列数

返回

矩阵列数

template<typename IDT> inline CHIPSUM_FUNCTION_INLINE void SetRow (IDT i, vector_type &x)

SetRow.

参数
  • i – 行索引

  • x

template<typename IDT> inline CHIPSUM_FUNCTION_INLINE void SetCol (IDT i, vector_type &x)

SetCol.

参数
  • i – 列索引

  • x

template<typename IDT> inline CHIPSUM_FUNCTION_INLINE void GetRowCopy (IDT i, vector_type &x)

GetRowCopy 获取某一行的拷贝数据

参数
  • i – 行索引

  • x – 获取的指定行数据

template<typename IDT> inline CHIPSUM_FUNCTION_INLINE void GetColCopy (IDT i, vector_type &x)

GetColCopy 获取某一列的拷贝数据

参数
  • i – 列索引

  • x – 获取的指定列数据

template<typename IDT> inline CHIPSUM_FUNCTION_INLINE void GetRowSlice (IDT idx, IDT i, IDT j, vector_type &x)

GetRowSlice 获取某一行的拷贝数据

参数
  • idx – 行索引

  • i – 行终止索引

  • j – 行终止索引

  • x – 获取的指定行的由i到j部分的数据

template<typename IDT> inline CHIPSUM_FUNCTION_INLINE void GetColSlice (IDT idx, IDT i, IDT j, vector_type &x)

GetColSlice 获取某一列的拷贝数据

参数
  • idx – 列索引

  • i – 列起始索引

  • j – 列终止索引

  • x – 获取的指定列的由i到j部分的数据

template<typename IDT> inline CHIPSUM_FUNCTION_INLINE void GetPartSlice (IDT l_i, IDT l_j, IDT r_i, IDT r_j, DenseMatrix &x)

GetPartSlice 获取某一局部矩阵的拷贝数据

参数
  • l_i – 左上角行索引

  • l_j – 左上角列索引

  • r_i – 右下角行索引

  • r_j – 右下角列索引

  • x – 获取指定区域的数据

inline CHIPSUM_FUNCTION_INLINE void DeviceToHost ()

Device端到Host端数据深拷贝

inline CHIPSUM_FUNCTION_INLINE void HostToDevice ()

Host端到Device端数据深拷贝

inline CHIPSUM_FUNCTION_INLINE DenseMatrix operator* (DenseMatrix &m)

operator * GEMM

参数

m – 稠密矩阵

返回

ret 稠密矩阵(结果)

template<typename ... Args> inline CHIPSUM_FUNCTION_INLINE void GEMM (DenseMatrix &B, DenseMatrix &C, Args... args)

GEMM C=A*B 当C为已初始化的矩阵时,强烈建议采用此接口进行GEMM运算

参数
  • B – 参与运算的另一矩阵

  • C – 结果

inline CHIPSUM_FUNCTION_INLINE void LU (const value_type tiny=0)

LU分解,结果存入原矩阵

参数

tiny – 分解精度,默认为0

inline CHIPSUM_FUNCTION_INLINE void QR (vector_type &x, vector_type &y)

QR分解,结果存入原矩阵

参数
  • 输出矩阵系数tau

  • 输出矩阵系数w

inline CHIPSUM_FUNCTION_INLINE void HESSENBERG (vector_type &t, vector_type &w)

HESSENBERG变换,结果存入原矩阵

参数
  • 输出矩阵系数tau

  • 输出矩阵系数w

inline CHIPSUM_FUNCTION_INLINE void TRSM (DenseMatrix &A, const value_type alpha, const char side[], const char uplo[], const char trans[]="N", const char diag[]="N")

op(A)*X = alpha*B if side == “L” or “l”, X*op(A) = alpha*B if side == “R” or “r”

参数
  • *this – [IN,OUT]输入/输出矩阵B,输入时,多重RHS的M×N矩阵。输出时,用求解的x覆盖。

  • A – [IN]矩阵A,上三角矩阵或下三角矩阵

  • alpha – [IN]标量系数

  • side[] – [IN]op(A)*X时”L” or “l”,X*op(A)时”R” or “r”

  • uplo[] – [IN]A是上三角矩阵”U” or “u”,下三角矩阵”L” or “l”

  • trans[][IN]op(A)当"N" – or “n”非转置,”T” or “t”转置, “C” or “c”伴随

  • diag[] – [IN]”U” or “u” 对角线参数,对角线为unit,”N” or “n”对角线非unit

inline CHIPSUM_FUNCTION_INLINE void TRMM (DenseMatrix &A, const value_type alpha, const char side[], const char uplo[], const char trans[]="N", const char diag[]="N")

B = alpha * op(A) * B if side == “L” or “l” B = alpha * B * op(A) if side == “R” or “r”.

参数
  • *this – [IN,OUT]输入/输出矩阵B,输入时,多重RHS的M×N矩阵。输出时,用求解的x覆盖。

  • A – [IN]矩阵A,上三角矩阵或下三角矩阵

  • alpha – [IN]标量系数

  • side[] – [IN]op(A)*X时”L” or “l”,X*op(A)时”R” or “r”

  • uplo[] – [IN]A是上三角矩阵”U” or “u”,下三角矩阵”L” or “l”

  • trans[][IN]op(A)当"N" – or “n”非转置,”T” or “t”转置, “C” or “c”伴随

  • diag[] – [IN]”U” or “u” 对角线参数,对角线为unit,”N” or “n”对角线非unit

inline CHIPSUM_FUNCTION_INLINE int TRTRI (const char uplo[], const char diag[]="N")

上/下三角矩阵的逆, A = inv(A)

参数
  • *this – [IN,OUT]输入/输出矩阵A/inv(A)

  • diag[] – [IN]”U” or “u” 对角线参数,对角线为unit,”N” or “n”对角线非unit

返回

int 0成功,i如果矩阵的第i对角线元素为零,且无法完成计算

inline CHIPSUM_FUNCTION_INLINE vector_type operator* (vector_type &v)

operator * GEMV

参数

v – 向量

返回

向量(结果)

template<typename ... Args> inline CHIPSUM_FUNCTION_INLINE void GEMV (vector_type &x, vector_type &y, Args... args)

GEMM C=A*B 当C为已初始化的矩阵时,强烈建议采用此接口进行GEMM运算

参数
  • B – 参与运算的另一矩阵

  • C – 结果

inline CHIPSUM_FUNCTION_INLINE DenseMatrix operator* (const value_type &a)

operator *= A*=a

参数

a – 系数

返回

A(结果)

inline CHIPSUM_FUNCTION_INLINE DenseMatrix & operator*= (const value_type &a)

operator *= A*=a

参数

a – 系数

返回

A(结果)

inline CHIPSUM_FUNCTION_INLINE DenseMatrix & operator/= (const value_type &a)

operator /= A/=a

Attention

后续希望将1/a变为类似ChipSum::Numeric::Const<ValueType>::one()/a;

参数

a – 系数

返回

A(结果)

inline CHIPSUM_FUNCTION_INLINE value_type & operator() (const_size_type_ref i, const_size_type_ref j)

operator () 获取A(i,j)

参数
  • i – 行索引

  • j – 列索引

返回

A(i,j)

inline CHIPSUM_FUNCTION_INLINE const value_type & operator() (const_size_type_ref i, const_size_type_ref j) const

operator () 获取A(i,j)(只读)

参数
  • i – 行数

  • j – 列数

返回

A(i,j)

inline CHIPSUM_SPECIAL_INLINE value_type * operator[] (const_size_type_ref i) const

operator [], 获取device端 A(i,j)值 device端 仅返回二维中的该行的首地址,列由C++自身寻址完成

参数
  • i – 行索引

  • j – 列索引

返回

A[i,0]

inline CHIPSUM_SPECIAL_INLINE value_type & Item (const_size_type_ref i, const_size_type_ref j) const

Item函数, 获取device端 A(i,j)值

参数
  • i – 行索引

  • j – 列索引

返回

A[i,j]

template<typename OStreamT = std::ostream> inline CHIPSUM_FUNCTION_INLINE void Print (OStreamT &out=std::cout)

Print 打印函数

参数

out – 输出流