#include <gemm.hpp>
Static Public Member Functions | |
template<typename eT > | |
static void | apply_blas_type (Mat< eT > &C, const Mat< eT > &A, const Mat< eT > &B, const eT alpha=eT(1), const eT beta=eT(0)) |
template<typename eT > | |
static void | apply (Mat< eT > &C, const Mat< eT > &A, const Mat< eT > &B, const eT alpha=eT(1), const eT beta=eT(0)) |
immediate multiplication of matrices A and B, storing the result in C | |
static void | apply (Mat< float > &C, const Mat< float > &A, const Mat< float > &B, const float alpha=float(1), const float beta=float(0)) |
static void | apply (Mat< double > &C, const Mat< double > &A, const Mat< double > &B, const double alpha=double(1), const double beta=double(0)) |
static void | apply (Mat< std::complex< float > > &C, const Mat< std::complex< float > > &A, const Mat< std::complex< float > > &B, const std::complex< float > alpha=std::complex< float >(1), const std::complex< float > beta=std::complex< float >(0)) |
static void | apply (Mat< std::complex< double > > &C, const Mat< std::complex< double > > &A, const Mat< std::complex< double > > &B, const std::complex< double > alpha=std::complex< double >(1), const std::complex< double > beta=std::complex< double >(0)) |
Definition at line 398 of file gemm.hpp.
static void gemm< do_trans_A, do_trans_B, use_alpha, use_beta >::apply_blas_type | ( | Mat< eT > & | C, | |
const Mat< eT > & | A, | |||
const Mat< eT > & | B, | |||
const eT | alpha = eT(1) , |
|||
const eT | beta = eT(0) | |||
) | [inline, static] |
Definition at line 406 of file gemm.hpp.
References gemm< do_trans_A, do_trans_B, use_alpha, use_beta >::apply(), Mat< eT >::mem, Mat< eT >::memptr(), Mat< eT >::n_cols, Mat< eT >::n_elem, and Mat< eT >::n_rows.
Referenced by gemm< do_trans_A, do_trans_B, use_alpha, use_beta >::apply().
00407 { 00408 arma_extra_debug_sigprint(); 00409 00410 if( ((A.n_elem <= 64u) && (B.n_elem <= 64u)) ) 00411 { 00412 gemm_emul_simple<do_trans_A, do_trans_B, use_alpha, use_beta>::apply(C,A,B,alpha,beta); 00413 } 00414 else 00415 { 00416 #if defined(ARMA_USE_ATLAS) 00417 { 00418 arma_extra_debug_print("atlas::cblas_gemm()"); 00419 00420 atlas::cblas_gemm<eT> 00421 ( 00422 atlas::CblasColMajor, 00423 (do_trans_A) ? atlas::CblasTrans : atlas::CblasNoTrans, 00424 (do_trans_B) ? atlas::CblasTrans : atlas::CblasNoTrans, 00425 C.n_rows, 00426 C.n_cols, 00427 (do_trans_A) ? A.n_rows : A.n_cols, 00428 (use_alpha) ? alpha : eT(1), 00429 A.mem, 00430 (do_trans_A) ? A.n_rows : C.n_rows, 00431 B.mem, 00432 (do_trans_B) ? C.n_cols : ( (do_trans_A) ? A.n_rows : A.n_cols ), 00433 (use_beta) ? beta : eT(0), 00434 C.memptr(), 00435 C.n_rows 00436 ); 00437 } 00438 #elif defined(ARMA_USE_BLAS) 00439 { 00440 arma_extra_debug_print("blas::gemm_()"); 00441 00442 const char trans_A = (do_trans_A) ? 'T' : 'N'; 00443 const char trans_B = (do_trans_B) ? 'T' : 'N'; 00444 00445 const int m = C.n_rows; 00446 const int n = C.n_cols; 00447 const int k = (do_trans_A) ? A.n_rows : A.n_cols; 00448 00449 const eT local_alpha = (use_alpha) ? alpha : eT(1); 00450 00451 const int lda = (do_trans_A) ? k : m; 00452 const int ldb = (do_trans_B) ? n : k; 00453 00454 const eT local_beta = (use_beta) ? beta : eT(0); 00455 00456 arma_extra_debug_print( arma_boost::format("blas::gemm_(): trans_A = %c") % trans_A ); 00457 arma_extra_debug_print( arma_boost::format("blas::gemm_(): trans_B = %c") % trans_B ); 00458 00459 blas::gemm_<eT> 00460 ( 00461 &trans_A, 00462 &trans_B, 00463 &m, 00464 &n, 00465 &k, 00466 &local_alpha, 00467 A.mem, 00468 &lda, 00469 B.mem, 00470 &ldb, 00471 &local_beta, 00472 C.memptr(), 00473 &m 00474 ); 00475 } 00476 #else 00477 { 00478 gemm_emul_cache<do_trans_A, do_trans_B, use_alpha, use_beta>::apply(C,A,B,alpha,beta); 00479 } 00480 #endif 00481 } 00482 }
static void gemm< do_trans_A, do_trans_B, use_alpha, use_beta >::apply | ( | Mat< eT > & | C, | |
const Mat< eT > & | A, | |||
const Mat< eT > & | B, | |||
const eT | alpha = eT(1) , |
|||
const eT | beta = eT(0) | |||
) | [inline, static] |
immediate multiplication of matrices A and B, storing the result in C
Definition at line 491 of file gemm.hpp.
References Mat< eT >::n_elem.
Referenced by gemm< do_trans_A, do_trans_B, use_alpha, use_beta >::apply_blas_type().
00492 { 00493 if( (A.n_elem <= 64u) && (B.n_elem <= 64u) ) 00494 { 00495 gemm_emul_simple<do_trans_A, do_trans_B, use_alpha, use_beta>::apply(C,A,B,alpha,beta); 00496 } 00497 else 00498 { 00499 gemm_emul_cache<do_trans_A, do_trans_B, use_alpha, use_beta>::apply(C,A,B,alpha,beta); 00500 } 00501 }
static void gemm< do_trans_A, do_trans_B, use_alpha, use_beta >::apply | ( | Mat< float > & | C, | |
const Mat< float > & | A, | |||
const Mat< float > & | B, | |||
const float | alpha = float(1) , |
|||
const float | beta = float(0) | |||
) | [inline, static] |
Definition at line 509 of file gemm.hpp.
References gemm< do_trans_A, do_trans_B, use_alpha, use_beta >::apply_blas_type().
00516 { 00517 gemm<do_trans_A, do_trans_B, use_alpha, use_beta>::apply_blas_type(C,A,B,alpha,beta); 00518 }
static void gemm< do_trans_A, do_trans_B, use_alpha, use_beta >::apply | ( | Mat< double > & | C, | |
const Mat< double > & | A, | |||
const Mat< double > & | B, | |||
const double | alpha = double(1) , |
|||
const double | beta = double(0) | |||
) | [inline, static] |
Definition at line 526 of file gemm.hpp.
References gemm< do_trans_A, do_trans_B, use_alpha, use_beta >::apply_blas_type().
00533 { 00534 gemm<do_trans_A, do_trans_B, use_alpha, use_beta>::apply_blas_type(C,A,B,alpha,beta); 00535 }
static void gemm< do_trans_A, do_trans_B, use_alpha, use_beta >::apply | ( | Mat< std::complex< float > > & | C, | |
const Mat< std::complex< float > > & | A, | |||
const Mat< std::complex< float > > & | B, | |||
const std::complex< float > | alpha = std::complex<float>(1) , |
|||
const std::complex< float > | beta = std::complex<float>(0) | |||
) | [inline, static] |
Definition at line 543 of file gemm.hpp.
References gemm< do_trans_A, do_trans_B, use_alpha, use_beta >::apply_blas_type().
00550 { 00551 gemm<do_trans_A, do_trans_B, use_alpha, use_beta>::apply_blas_type(C,A,B,alpha,beta); 00552 }
static void gemm< do_trans_A, do_trans_B, use_alpha, use_beta >::apply | ( | Mat< std::complex< double > > & | C, | |
const Mat< std::complex< double > > & | A, | |||
const Mat< std::complex< double > > & | B, | |||
const std::complex< double > | alpha = std::complex<double>(1) , |
|||
const std::complex< double > | beta = std::complex<double>(0) | |||
) | [inline, static] |
Definition at line 560 of file gemm.hpp.
References gemm< do_trans_A, do_trans_B, use_alpha, use_beta >::apply_blas_type().
00567 { 00568 gemm<do_trans_A, do_trans_B, use_alpha, use_beta>::apply_blas_type(C,A,B,alpha,beta); 00569 }