void bl1_sgemm_blas( trans1_t transa, trans1_t transb, int m, int n, int k, float* alpha, float* a, int lda, float* b, int ldb, float* beta, float* c, int ldc ) { #ifdef BLIS1_ENABLE_CBLAS_INTERFACES enum CBLAS_ORDER cblas_order = CblasColMajor; enum CBLAS_TRANSPOSE cblas_transa; enum CBLAS_TRANSPOSE cblas_transb; bl1_param_map_to_netlib_trans( transa, &cblas_transa ); bl1_param_map_to_netlib_trans( transb, &cblas_transb ); cblas_sgemm( cblas_order, cblas_transa, cblas_transb, m, n, k, *alpha, a, lda, b, ldb, *beta, c, ldc ); #else char blas_transa; char blas_transb; bl1_param_map_to_netlib_trans( transa, &blas_transa ); bl1_param_map_to_netlib_trans( transb, &blas_transb ); F77_sgemm( &blas_transa, &blas_transb, &m, &n, &k, alpha, a, &lda, b, &ldb, beta, c, &ldc ); #endif }
void OpenMPBLAS3::gemm( const enum CBLAS_ORDER order, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_TRANSPOSE TransB, const IndexType m, const IndexType n, const IndexType k, const float alpha, const float* A, const IndexType lda, const float* B, const IndexType ldb, const float beta, float* C, const IndexType ldc, SyncToken* syncToken ) { if ( syncToken ) { LAMA_LOG_WARN( logger, "no asynchronous execution for openmp possible at this level." ) } char TA, TB; #ifdef F77_CHAR F77_CHAR F77_TA, F77_TB; #else #define F77_TA &TA #define F77_TB &TB #endif #ifdef F77_INT F77_INT F77_M = m, F77_N = n, F77_K = k, F77_lda = lda, F77_ldb = ldb; F77_INT F77_ldc = ldc; #else #define F77_M m #define F77_N n #define F77_K k #define F77_lda lda #define F77_ldb ldb #define F77_ldc ldc #endif IndexType RowMajorStrg; RowMajorStrg = 0; if ( order == CblasColMajor ) { if ( TransA == CblasTrans ) { TA = 'T'; } else if ( TransA == CblasConjTrans ) { TA = 'C'; } else if ( TransA == CblasNoTrans ) { TA = 'N'; } else { BLASHelper::XERBLA_cpu( RowMajorStrg, 2, "cblas_sgemm", "Illegal TransA setting, %d\n", TransA ); RowMajorStrg = 0; return; } if ( TransB == CblasTrans ) { TB = 'T'; } else if ( TransB == CblasConjTrans ) { TB = 'C'; } else if ( TransB == CblasNoTrans ) { TB = 'N'; } else { BLASHelper::XERBLA_cpu( RowMajorStrg, 3, "cblas_sgemm", "Illegal TransB setting, %d\n", TransB ); RowMajorStrg = 0; return; } #ifdef F77_CHAR F77_TA = C2F_CHAR( &TA ); F77_TB = C2F_CHAR( &TB ); #endif F77_sgemm( F77_TA, F77_TB, &F77_M, &F77_N, &F77_K, &alpha, A, &F77_lda, B, &F77_ldb, &beta, C, &F77_ldc ); } else if ( order == CblasRowMajor ) { RowMajorStrg = 1; if ( TransA == CblasTrans ) { TB = 'T'; } else if ( TransA == CblasConjTrans ) { TB = 'C'; } else if ( TransA == CblasNoTrans ) { TB = 'N'; } else { BLASHelper::XERBLA_cpu( RowMajorStrg, 2, "cblas_sgemm", "Illegal TransA setting, %d\n", TransA ); RowMajorStrg = 0; return; } if ( TransB == CblasTrans ) { TA = 'T'; } else if ( TransB == CblasConjTrans ) { TA = 'C'; } else if ( TransB == CblasNoTrans ) { TA = 'N'; } else { BLASHelper::XERBLA_cpu( RowMajorStrg, 2, "cblas_sgemm", "Illegal TransA setting, %d\n", TransA ); RowMajorStrg = 0; return; } #ifdef F77_CHAR F77_TA = C2F_CHAR( &TA ); F77_TB = C2F_CHAR( &TB ); #endif F77_sgemm( F77_TA, F77_TB, &F77_N, &F77_M, &F77_K, &alpha, B, &F77_ldb, A, &F77_lda, &beta, C, &F77_ldc ); } else { BLASHelper::XERBLA_cpu( RowMajorStrg, 1, "cblas_sgemm", "Illegal order setting, %d\n", order ); } RowMajorStrg = 0; return; }
void cblas_sgemm(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_TRANSPOSE TransB, const int M, const int N, const int K, const float alpha, const float *A, const int lda, const float *B, const int ldb, const float beta, float *C, const int ldc) { char TA, TB; #ifdef F77_CHAR F77_CHAR F77_TA, F77_TB; #else #define F77_TA &TA #define F77_TB &TB #endif #ifdef F77_INT F77_INT F77_M=M, F77_N=N, F77_K=K, F77_lda=lda, F77_ldb=ldb; F77_INT F77_ldc=ldc; #else #define F77_M M #define F77_N N #define F77_K K #define F77_lda lda #define F77_ldb ldb #define F77_ldc ldc #endif extern int CBLAS_CallFromC; extern int RowMajorStrg; RowMajorStrg = 0; CBLAS_CallFromC = 1; if( Order == CblasColMajor ) { if(TransA == CblasTrans) TA='T'; else if ( TransA == CblasConjTrans ) TA='C'; else if ( TransA == CblasNoTrans ) TA='N'; else { cblas_xerbla(2, "cblas_sgemm", "Illegal TransA setting, %d\n", TransA); CBLAS_CallFromC = 0; RowMajorStrg = 0; return; } if(TransB == CblasTrans) TB='T'; else if ( TransB == CblasConjTrans ) TB='C'; else if ( TransB == CblasNoTrans ) TB='N'; else { cblas_xerbla(3, "cblas_sgemm", "Illegal TransB setting, %d\n", TransB); CBLAS_CallFromC = 0; RowMajorStrg = 0; return; } #ifdef F77_CHAR F77_TA = C2F_CHAR(&TA); F77_TB = C2F_CHAR(&TB); #endif F77_sgemm(F77_TA, F77_TB, &F77_M, &F77_N, &F77_K, &alpha, A, &F77_lda, B, &F77_ldb, &beta, C, &F77_ldc); } else if (Order == CblasRowMajor) { RowMajorStrg = 1; if(TransA == CblasTrans) TB='T'; else if ( TransA == CblasConjTrans ) TB='C'; else if ( TransA == CblasNoTrans ) TB='N'; else { cblas_xerbla(2, "cblas_sgemm", "Illegal TransA setting, %d\n", TransA); CBLAS_CallFromC = 0; RowMajorStrg = 0; return; } if(TransB == CblasTrans) TA='T'; else if ( TransB == CblasConjTrans ) TA='C'; else if ( TransB == CblasNoTrans ) TA='N'; else { cblas_xerbla(2, "cblas_sgemm", "Illegal TransA setting, %d\n", TransA); CBLAS_CallFromC = 0; RowMajorStrg = 0; return; } #ifdef F77_CHAR F77_TA = C2F_CHAR(&TA); F77_TB = C2F_CHAR(&TB); #endif F77_sgemm(F77_TA, F77_TB, &F77_N, &F77_M, &F77_K, &alpha, B, &F77_ldb, A, &F77_lda, &beta, C, &F77_ldc); } else cblas_xerbla(1, "cblas_sgemm", "Illegal Order setting, %d\n", Order); CBLAS_CallFromC = 0; RowMajorStrg = 0; }