MyraMath
gemm.h
Go to the documentation of this file.
1 // ========================================================================= //
2 // This file is part of MyraMath, copyright (c) 2014-2019 by Ryan A Chilton //
3 // and distributed by MyraCore, LLC. See LICENSE.txt for license terms. //
4 // ========================================================================= //
5 
6 #ifndef MYRAMATH_SPARSE_GEMM_H
7 #define MYRAMATH_SPARSE_GEMM_H
8 
17 #include <myramath/utility/detail/LIBPUBLIC.h>
19 
20 namespace myra {
21 
22 // Forward declarations.
23 template<class Number> class Matrix;
24 template<class Number> class MatrixRange;
25 template<class Number> class CMatrixRange;
26 template<class Number> class CSparseMatrixRange;
27 
28 // ------------------------------- Multiplying from left. -----------------------------------------
29 
31 LIBPUBLIC 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 LIBPUBLIC 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 LIBPUBLIC 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 LIBPUBLIC 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);
35 
37 LIBPUBLIC Matrix<NumberS> gemm(const CSparseMatrixRange<NumberS>& A, char op_A, const CMatrixRange<NumberS>& B, char op_B, NumberS alpha=1);
38 LIBPUBLIC Matrix<NumberD> gemm(const CSparseMatrixRange<NumberD>& A, char op_A, const CMatrixRange<NumberD>& B, char op_B, NumberD alpha=1);
39 LIBPUBLIC Matrix<NumberC> gemm(const CSparseMatrixRange<NumberC>& A, char op_A, const CMatrixRange<NumberC>& B, char op_B, NumberC alpha=1);
40 LIBPUBLIC Matrix<NumberZ> gemm(const CSparseMatrixRange<NumberZ>& A, char op_A, const CMatrixRange<NumberZ>& B, char op_B, NumberZ alpha=1);
41 
43 LIBPUBLIC Matrix<NumberS> gemm(const CSparseMatrixRange<NumberS>& A, char op_A, const CMatrixRange<NumberS>& B, NumberS alpha=1);
44 LIBPUBLIC Matrix<NumberD> gemm(const CSparseMatrixRange<NumberD>& A, char op_A, const CMatrixRange<NumberD>& B, NumberD alpha=1);
45 LIBPUBLIC Matrix<NumberC> gemm(const CSparseMatrixRange<NumberC>& A, char op_A, const CMatrixRange<NumberC>& B, NumberC alpha=1);
46 LIBPUBLIC Matrix<NumberZ> gemm(const CSparseMatrixRange<NumberZ>& A, char op_A, const CMatrixRange<NumberZ>& B, NumberZ alpha=1);
47 
49 LIBPUBLIC Matrix<NumberS> gemm(const CSparseMatrixRange<NumberS>& A, const CMatrixRange<NumberS>& B, char op_B, NumberS alpha=1);
50 LIBPUBLIC Matrix<NumberD> gemm(const CSparseMatrixRange<NumberD>& A, const CMatrixRange<NumberD>& B, char op_B, NumberD alpha=1);
51 LIBPUBLIC Matrix<NumberC> gemm(const CSparseMatrixRange<NumberC>& A, const CMatrixRange<NumberC>& B, char op_B, NumberC alpha=1);
52 LIBPUBLIC Matrix<NumberZ> gemm(const CSparseMatrixRange<NumberZ>& A, const CMatrixRange<NumberZ>& B, char op_B, NumberZ alpha=1);
53 
55 LIBPUBLIC Matrix<NumberS> gemm(const CSparseMatrixRange<NumberS>& A, const CMatrixRange<NumberS>& B, NumberS alpha=1);
56 LIBPUBLIC Matrix<NumberD> gemm(const CSparseMatrixRange<NumberD>& A, const CMatrixRange<NumberD>& B, NumberD alpha=1);
57 LIBPUBLIC Matrix<NumberC> gemm(const CSparseMatrixRange<NumberC>& A, const CMatrixRange<NumberC>& B, NumberC alpha=1);
58 LIBPUBLIC Matrix<NumberZ> gemm(const CSparseMatrixRange<NumberZ>& A, const CMatrixRange<NumberZ>& B, NumberZ alpha=1);
59 
61 LIBPUBLIC Matrix<NumberS> operator * (const CSparseMatrixRange<NumberS>& A, const CMatrixRange<NumberS>& B);
62 LIBPUBLIC Matrix<NumberD> operator * (const CSparseMatrixRange<NumberD>& A, const CMatrixRange<NumberD>& B);
63 LIBPUBLIC Matrix<NumberC> operator * (const CSparseMatrixRange<NumberC>& A, const CMatrixRange<NumberC>& B);
64 LIBPUBLIC Matrix<NumberZ> operator * (const CSparseMatrixRange<NumberZ>& A, const CMatrixRange<NumberZ>& B);
65 
66 // ------------------------------- Multiplying from right. -----------------------------------------
67 
69 LIBPUBLIC 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 LIBPUBLIC 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 LIBPUBLIC 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 LIBPUBLIC 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);
73 
75 LIBPUBLIC Matrix<NumberS> gemm(const CMatrixRange<NumberS>& A, char op_A, const CSparseMatrixRange<NumberS>& B, char op_B, NumberS alpha=1);
76 LIBPUBLIC Matrix<NumberD> gemm(const CMatrixRange<NumberD>& A, char op_A, const CSparseMatrixRange<NumberD>& B, char op_B, NumberD alpha=1);
77 LIBPUBLIC Matrix<NumberC> gemm(const CMatrixRange<NumberC>& A, char op_A, const CSparseMatrixRange<NumberC>& B, char op_B, NumberC alpha=1);
78 LIBPUBLIC Matrix<NumberZ> gemm(const CMatrixRange<NumberZ>& A, char op_A, const CSparseMatrixRange<NumberZ>& B, char op_B, NumberZ alpha=1);
79 
81 LIBPUBLIC Matrix<NumberS> gemm(const CMatrixRange<NumberS>& A, char op_A, const CSparseMatrixRange<NumberS>& B, NumberS alpha=1);
82 LIBPUBLIC Matrix<NumberD> gemm(const CMatrixRange<NumberD>& A, char op_A, const CSparseMatrixRange<NumberD>& B, NumberD alpha=1);
83 LIBPUBLIC Matrix<NumberC> gemm(const CMatrixRange<NumberC>& A, char op_A, const CSparseMatrixRange<NumberC>& B, NumberC alpha=1);
84 LIBPUBLIC Matrix<NumberZ> gemm(const CMatrixRange<NumberZ>& A, char op_A, const CSparseMatrixRange<NumberZ>& B, NumberZ alpha=1);
85 
87 LIBPUBLIC Matrix<NumberS> gemm(const CMatrixRange<NumberS>& A, const CSparseMatrixRange<NumberS>& B, char op_B, NumberS alpha=1);
88 LIBPUBLIC Matrix<NumberD> gemm(const CMatrixRange<NumberD>& A, const CSparseMatrixRange<NumberD>& B, char op_B, NumberD alpha=1);
89 LIBPUBLIC Matrix<NumberC> gemm(const CMatrixRange<NumberC>& A, const CSparseMatrixRange<NumberC>& B, char op_B, NumberC alpha=1);
90 LIBPUBLIC Matrix<NumberZ> gemm(const CMatrixRange<NumberZ>& A, const CSparseMatrixRange<NumberZ>& B, char op_B, NumberZ alpha=1);
91 
93 LIBPUBLIC Matrix<NumberS> gemm(const CMatrixRange<NumberS>& A, const CSparseMatrixRange<NumberS>& B, NumberS alpha=1);
94 LIBPUBLIC Matrix<NumberD> gemm(const CMatrixRange<NumberD>& A, const CSparseMatrixRange<NumberD>& B, NumberD alpha=1);
95 LIBPUBLIC Matrix<NumberC> gemm(const CMatrixRange<NumberC>& A, const CSparseMatrixRange<NumberC>& B, NumberC alpha=1);
96 LIBPUBLIC Matrix<NumberZ> gemm(const CMatrixRange<NumberZ>& A, const CSparseMatrixRange<NumberZ>& B, NumberZ alpha=1);
97 
99 LIBPUBLIC Matrix<NumberS> operator * (const CMatrixRange<NumberS>& A, const CSparseMatrixRange<NumberS>& B);
100 LIBPUBLIC Matrix<NumberD> operator * (const CMatrixRange<NumberD>& A, const CSparseMatrixRange<NumberD>& B);
101 LIBPUBLIC Matrix<NumberC> operator * (const CMatrixRange<NumberC>& A, const CSparseMatrixRange<NumberC>& B);
102 LIBPUBLIC Matrix<NumberZ> operator * (const CMatrixRange<NumberZ>& A, const CSparseMatrixRange<NumberZ>& B);
103 
104 } // namespace
105 
106 #endif
Definition: syntax.dox:1
Various utility functions/classes related to scalar Number types.