35 #ifndef _BLAZE_MATH_BLAS_GEMM_H_
36 #define _BLAZE_MATH_BLAS_GEMM_H_
43 #include <boost/cast.hpp>
70 BLAZE_ALWAYS_INLINE void gemm( CBLAS_ORDER order, CBLAS_TRANSPOSE transA, CBLAS_TRANSPOSE transB,
71 int m,
int n,
int k,
float alpha,
const float* A,
int lda,
72 const float* B,
int ldb,
float beta,
float* C,
int ldc );
74 BLAZE_ALWAYS_INLINE void gemm( CBLAS_ORDER order, CBLAS_TRANSPOSE transA, CBLAS_TRANSPOSE transB,
75 int m,
int n,
int k,
double alpha,
const double* A,
int lda,
76 const double* B,
int ldb,
double beta,
float* C,
int ldc );
78 BLAZE_ALWAYS_INLINE void gemm( CBLAS_ORDER order, CBLAS_TRANSPOSE transA, CBLAS_TRANSPOSE transB,
79 int m,
int n,
int k, complex<float> alpha,
const complex<float>* A,
80 int lda,
const complex<float>* B,
int ldb, complex<float> beta,
83 BLAZE_ALWAYS_INLINE void gemm( CBLAS_ORDER order, CBLAS_TRANSPOSE transA, CBLAS_TRANSPOSE transB,
84 int m,
int n,
int k, complex<double> alpha,
const complex<double>* A,
85 int lda,
const complex<double>* B,
int ldb, complex<double> beta,
88 template<
typename MT1,
bool SO1,
typename MT2,
bool SO2,
typename MT3,
bool SO3,
typename ST >
90 const DenseMatrix<MT3,SO3>& B, ST alpha, ST beta );
122 BLAZE_ALWAYS_INLINE void gemm( CBLAS_ORDER order, CBLAS_TRANSPOSE transA, CBLAS_TRANSPOSE transB,
123 int m,
int n,
int k,
float alpha,
const float* A,
int lda,
124 const float* B,
int ldb,
float beta,
float* C,
int ldc )
126 cblas_sgemm( order, transA, transB, m, n, k, alpha, A, lda, B, ldb, beta, C, ldc );
157 BLAZE_ALWAYS_INLINE void gemm( CBLAS_ORDER order, CBLAS_TRANSPOSE transA, CBLAS_TRANSPOSE transB,
158 int m,
int n,
int k,
double alpha,
const double* A,
int lda,
159 const double* B,
int ldb,
double beta,
double* C,
int ldc )
161 cblas_dgemm( order, transA, transB, m, n, k, alpha, A, lda, B, ldb, beta, C, ldc );
192 BLAZE_ALWAYS_INLINE void gemm( CBLAS_ORDER order, CBLAS_TRANSPOSE transA, CBLAS_TRANSPOSE transB,
193 int m,
int n,
int k, complex<float> alpha,
const complex<float>* A,
194 int lda,
const complex<float>* B,
int ldb, complex<float> beta,
195 complex<float>* C,
int ldc )
197 cblas_cgemm( order, transA, transB, m, n, k, &alpha, A, lda, B, ldb, &beta, C, ldc );
228 BLAZE_ALWAYS_INLINE void gemm( CBLAS_ORDER order, CBLAS_TRANSPOSE transA, CBLAS_TRANSPOSE transB,
229 int m,
int n,
int k, complex<double> alpha,
const complex<double>* A,
230 int lda,
const complex<double>* B,
int ldb, complex<double> beta,
231 complex<double>* C,
int ldc )
233 cblas_zgemm( order, transA, transB, m, n, k, &alpha, A, lda, B, ldb, &beta, C, ldc );
256 template<
typename MT1
264 const DenseMatrix<MT3,SO3>& B, ST alpha, ST beta )
266 using boost::numeric_cast;
280 const int m ( numeric_cast<int>( (~A).
rows() ) );
281 const int n ( numeric_cast<int>( (~B).
columns() ) );
282 const int k ( numeric_cast<int>( (~A).
columns() ) );
283 const int lda( numeric_cast<int>( (~A).
spacing() ) );
284 const int ldb( numeric_cast<int>( (~B).
spacing() ) );
285 const int ldc( numeric_cast<int>( (~C).
spacing() ) );
287 gemm( ( IsRowMajorMatrix<MT1>::value )?( CblasRowMajor ):( CblasColMajor ),
288 ( SO1 == SO2 )?( CblasNoTrans ):( CblasTrans ),
289 ( SO1 == SO3 )?( CblasNoTrans ):( CblasTrans ),
290 m, n, k, alpha, (~A).data(), lda, (~B).data(), ldb, beta, (~C).data(), ldc );
Constraint on the data type.
#define BLAZE_CONSTRAINT_MUST_HAVE_MUTABLE_DATA_ACCESS(T)
Constraint on the data type.In case the given data type T does not provide low-level data access to m...
Definition: MutableDataAccess.h:79
#define BLAZE_CONSTRAINT_MUST_HAVE_CONST_DATA_ACCESS(T)
Constraint on the data type.In case the given data type T does not provide low-level data access to c...
Definition: ConstDataAccess.h:79
#define BLAZE_CONSTRAINT_MUST_NOT_BE_COMPUTATION_TYPE(T)
Constraint on the data type.In case the given data type T is a computational expression (i...
Definition: Computation.h:118
BLAZE_ALWAYS_INLINE size_t rows(const Matrix< MT, SO > &matrix)
Returns the current number of rows of the matrix.
Definition: Matrix.h:308
Header file for the IsSymmetric type trait.
Namespace of the Blaze C++ math library.
Definition: Blaze.h:57
#define BLAZE_ALWAYS_INLINE
Platform dependent setup of an enforced inline keyword.
Definition: Inline.h:85
Header file for the DenseMatrix base class.
Type ElementType
Type of the sparse matrix elements.
Definition: CompressedMatrix.h:2586
Constraint on the data type.
Constraint on the data type.
const bool spacing
Adding an additional spacing line between two log messages.This setting gives the opportunity to add ...
Definition: Logging.h:70
System settings for the BLAS mode.
Header file for run time assertion macros.
Constraint on the data type.
#define BLAZE_CONSTRAINT_MUST_BE_BLAS_COMPATIBLE_TYPE(T)
Constraint on the data type.In case the given data type T is not a BLAS compatible data type (i...
Definition: BlasCompatible.h:79
Header file for the IsRowMajorMatrix type trait.
BLAZE_ALWAYS_INLINE size_t columns(const Matrix< MT, SO > &matrix)
Returns the current number of columns of the matrix.
Definition: Matrix.h:324
Header file for the complex data type.
System settings for the inline keywords.