6 #ifndef MYRAMATH_SPARSE_GEMM_H 7 #define MYRAMATH_SPARSE_GEMM_H 17 #include <myramath/MYRAMATH_EXPORT.h> 23 template<
class Number>
class Matrix;
24 template<
class Number>
class MatrixRange;
25 template<
class Number>
class CMatrixRange;
26 template<
class Number>
class CSparseMatrixRange;
31 MYRAMATH_EXPORT
void gemm_inplace(
const MatrixRange<NumberS>& C,
const CSparseMatrixRange<NumberS>& A,
char op_A,
const CMatrixRange<NumberS>& B,
char op_B, NumberS alpha=1, NumberS beta=0);
32 MYRAMATH_EXPORT
void gemm_inplace(
const MatrixRange<NumberD>& C,
const CSparseMatrixRange<NumberD>& A,
char op_A,
const CMatrixRange<NumberD>& B,
char op_B, NumberD alpha=1, NumberD beta=0);
33 MYRAMATH_EXPORT
void gemm_inplace(
const MatrixRange<NumberC>& C,
const CSparseMatrixRange<NumberC>& A,
char op_A,
const CMatrixRange<NumberC>& B,
char op_B, NumberC alpha=1, NumberC beta=0);
34 MYRAMATH_EXPORT
void gemm_inplace(
const MatrixRange<NumberZ>& C,
const CSparseMatrixRange<NumberZ>& A,
char op_A,
const CMatrixRange<NumberZ>& B,
char op_B, NumberZ alpha=1, NumberZ beta=0);
37 MYRAMATH_EXPORT Matrix<NumberS> gemm(
const CSparseMatrixRange<NumberS>& A,
char op_A,
const CMatrixRange<NumberS>& B,
char op_B, NumberS alpha=1);
38 MYRAMATH_EXPORT Matrix<NumberD> gemm(
const CSparseMatrixRange<NumberD>& A,
char op_A,
const CMatrixRange<NumberD>& B,
char op_B, NumberD alpha=1);
39 MYRAMATH_EXPORT Matrix<NumberC> gemm(
const CSparseMatrixRange<NumberC>& A,
char op_A,
const CMatrixRange<NumberC>& B,
char op_B, NumberC alpha=1);
40 MYRAMATH_EXPORT Matrix<NumberZ> gemm(
const CSparseMatrixRange<NumberZ>& A,
char op_A,
const CMatrixRange<NumberZ>& B,
char op_B, NumberZ alpha=1);
43 MYRAMATH_EXPORT Matrix<NumberS> gemm(
const CSparseMatrixRange<NumberS>& A,
char op_A,
const CMatrixRange<NumberS>& B, NumberS alpha=1);
44 MYRAMATH_EXPORT Matrix<NumberD> gemm(
const CSparseMatrixRange<NumberD>& A,
char op_A,
const CMatrixRange<NumberD>& B, NumberD alpha=1);
45 MYRAMATH_EXPORT Matrix<NumberC> gemm(
const CSparseMatrixRange<NumberC>& A,
char op_A,
const CMatrixRange<NumberC>& B, NumberC alpha=1);
46 MYRAMATH_EXPORT Matrix<NumberZ> gemm(
const CSparseMatrixRange<NumberZ>& A,
char op_A,
const CMatrixRange<NumberZ>& B, NumberZ alpha=1);
49 MYRAMATH_EXPORT Matrix<NumberS> gemm(
const CSparseMatrixRange<NumberS>& A,
const CMatrixRange<NumberS>& B,
char op_B, NumberS alpha=1);
50 MYRAMATH_EXPORT Matrix<NumberD> gemm(
const CSparseMatrixRange<NumberD>& A,
const CMatrixRange<NumberD>& B,
char op_B, NumberD alpha=1);
51 MYRAMATH_EXPORT Matrix<NumberC> gemm(
const CSparseMatrixRange<NumberC>& A,
const CMatrixRange<NumberC>& B,
char op_B, NumberC alpha=1);
52 MYRAMATH_EXPORT Matrix<NumberZ> gemm(
const CSparseMatrixRange<NumberZ>& A,
const CMatrixRange<NumberZ>& B,
char op_B, NumberZ alpha=1);
55 MYRAMATH_EXPORT Matrix<NumberS> gemm(
const CSparseMatrixRange<NumberS>& A,
const CMatrixRange<NumberS>& B, NumberS alpha=1);
56 MYRAMATH_EXPORT Matrix<NumberD> gemm(
const CSparseMatrixRange<NumberD>& A,
const CMatrixRange<NumberD>& B, NumberD alpha=1);
57 MYRAMATH_EXPORT Matrix<NumberC> gemm(
const CSparseMatrixRange<NumberC>& A,
const CMatrixRange<NumberC>& B, NumberC alpha=1);
58 MYRAMATH_EXPORT Matrix<NumberZ> gemm(
const CSparseMatrixRange<NumberZ>& A,
const CMatrixRange<NumberZ>& B, NumberZ alpha=1);
61 MYRAMATH_EXPORT Matrix<NumberS> operator * (
const CSparseMatrixRange<NumberS>& A,
const CMatrixRange<NumberS>& B);
62 MYRAMATH_EXPORT Matrix<NumberD> operator * (
const CSparseMatrixRange<NumberD>& A,
const CMatrixRange<NumberD>& B);
63 MYRAMATH_EXPORT Matrix<NumberC> operator * (
const CSparseMatrixRange<NumberC>& A,
const CMatrixRange<NumberC>& B);
64 MYRAMATH_EXPORT Matrix<NumberZ> operator * (
const CSparseMatrixRange<NumberZ>& A,
const CMatrixRange<NumberZ>& B);
69 MYRAMATH_EXPORT
void gemm_inplace(
const MatrixRange<NumberS>& C,
const CMatrixRange<NumberS>& A,
char op_A,
const CSparseMatrixRange<NumberS>& B,
char op_B, NumberS alpha=1, NumberS beta=0);
70 MYRAMATH_EXPORT
void gemm_inplace(
const MatrixRange<NumberD>& C,
const CMatrixRange<NumberD>& A,
char op_A,
const CSparseMatrixRange<NumberD>& B,
char op_B, NumberD alpha=1, NumberD beta=0);
71 MYRAMATH_EXPORT
void gemm_inplace(
const MatrixRange<NumberC>& C,
const CMatrixRange<NumberC>& A,
char op_A,
const CSparseMatrixRange<NumberC>& B,
char op_B, NumberC alpha=1, NumberC beta=0);
72 MYRAMATH_EXPORT
void gemm_inplace(
const MatrixRange<NumberZ>& C,
const CMatrixRange<NumberZ>& A,
char op_A,
const CSparseMatrixRange<NumberZ>& B,
char op_B, NumberZ alpha=1, NumberZ beta=0);
75 MYRAMATH_EXPORT Matrix<NumberS> gemm(
const CMatrixRange<NumberS>& A,
char op_A,
const CSparseMatrixRange<NumberS>& B,
char op_B, NumberS alpha=1);
76 MYRAMATH_EXPORT Matrix<NumberD> gemm(
const CMatrixRange<NumberD>& A,
char op_A,
const CSparseMatrixRange<NumberD>& B,
char op_B, NumberD alpha=1);
77 MYRAMATH_EXPORT Matrix<NumberC> gemm(
const CMatrixRange<NumberC>& A,
char op_A,
const CSparseMatrixRange<NumberC>& B,
char op_B, NumberC alpha=1);
78 MYRAMATH_EXPORT Matrix<NumberZ> gemm(
const CMatrixRange<NumberZ>& A,
char op_A,
const CSparseMatrixRange<NumberZ>& B,
char op_B, NumberZ alpha=1);
81 MYRAMATH_EXPORT Matrix<NumberS> gemm(
const CMatrixRange<NumberS>& A,
char op_A,
const CSparseMatrixRange<NumberS>& B, NumberS alpha=1);
82 MYRAMATH_EXPORT Matrix<NumberD> gemm(
const CMatrixRange<NumberD>& A,
char op_A,
const CSparseMatrixRange<NumberD>& B, NumberD alpha=1);
83 MYRAMATH_EXPORT Matrix<NumberC> gemm(
const CMatrixRange<NumberC>& A,
char op_A,
const CSparseMatrixRange<NumberC>& B, NumberC alpha=1);
84 MYRAMATH_EXPORT Matrix<NumberZ> gemm(
const CMatrixRange<NumberZ>& A,
char op_A,
const CSparseMatrixRange<NumberZ>& B, NumberZ alpha=1);
87 MYRAMATH_EXPORT Matrix<NumberS> gemm(
const CMatrixRange<NumberS>& A,
const CSparseMatrixRange<NumberS>& B,
char op_B, NumberS alpha=1);
88 MYRAMATH_EXPORT Matrix<NumberD> gemm(
const CMatrixRange<NumberD>& A,
const CSparseMatrixRange<NumberD>& B,
char op_B, NumberD alpha=1);
89 MYRAMATH_EXPORT Matrix<NumberC> gemm(
const CMatrixRange<NumberC>& A,
const CSparseMatrixRange<NumberC>& B,
char op_B, NumberC alpha=1);
90 MYRAMATH_EXPORT Matrix<NumberZ> gemm(
const CMatrixRange<NumberZ>& A,
const CSparseMatrixRange<NumberZ>& B,
char op_B, NumberZ alpha=1);
93 MYRAMATH_EXPORT Matrix<NumberS> gemm(
const CMatrixRange<NumberS>& A,
const CSparseMatrixRange<NumberS>& B, NumberS alpha=1);
94 MYRAMATH_EXPORT Matrix<NumberD> gemm(
const CMatrixRange<NumberD>& A,
const CSparseMatrixRange<NumberD>& B, NumberD alpha=1);
95 MYRAMATH_EXPORT Matrix<NumberC> gemm(
const CMatrixRange<NumberC>& A,
const CSparseMatrixRange<NumberC>& B, NumberC alpha=1);
96 MYRAMATH_EXPORT Matrix<NumberZ> gemm(
const CMatrixRange<NumberZ>& A,
const CSparseMatrixRange<NumberZ>& B, NumberZ alpha=1);
99 MYRAMATH_EXPORT Matrix<NumberS> operator * (
const CMatrixRange<NumberS>& A,
const CSparseMatrixRange<NumberS>& B);
100 MYRAMATH_EXPORT Matrix<NumberD> operator * (
const CMatrixRange<NumberD>& A,
const CSparseMatrixRange<NumberD>& B);
101 MYRAMATH_EXPORT Matrix<NumberC> operator * (
const CMatrixRange<NumberC>& A,
const CSparseMatrixRange<NumberC>& B);
102 MYRAMATH_EXPORT Matrix<NumberZ> operator * (
const CMatrixRange<NumberZ>& A,
const CSparseMatrixRange<NumberZ>& B);
Various utility functions/classes related to scalar Number types.