Template Class DenseMatrix
Defined in File dense_matrix.hpp
Class Documentation
-
template<typename ...Props>
class ChipSum::Numeric::DenseMatrix Public Types
-
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
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 – 输出流
-
using matrix_type_ref = typename std::add_lvalue_reference<matrix_type>::type