diff --git a/interface/gemm_batch.c b/interface/gemm_batch.c index 7a8789e820..e36b8610db 100644 --- a/interface/gemm_batch.c +++ b/interface/gemm_batch.c @@ -298,19 +298,19 @@ void CNAME(enum CBLAS_ORDER order, enum CBLAS_TRANSPOSE * transa_array, enum CB group_ldb = ldb_array[i]; group_ldc = ldc_array[i]; - if (transb_array[i] == 'N') group_transa = 0; - if (transb_array[i] == 'T') group_transa = 1; + if (transa_array[i] == 'N') group_transa = 0; + if (transa_array[i] == 'T') group_transa = 1; #ifndef COMPLEX - if (transb_array[i] == 'C') group_transa = 1; + if (transa_array[i] == 'C') group_transa = 1; #else - if (transb_array[i] == 'C') group_transa = 3; + if (transa_array[i] == 'C') group_transa = 3; #endif - if (transa_array[i] == 'N') group_transb = 0; - if (transa_array[i] == 'T') group_transb = 1; + if (transb_array[i] == 'N') group_transb = 0; + if (transb_array[i] == 'T') group_transb = 1; #ifndef COMPLEX - if (transa_array[i] == 'C') group_transb = 1; + if (transb_array[i] == 'C') group_transb = 1; #else - if (transa_array[i] == 'C') group_transb = 3; + if (transb_array[i] == 'C') group_transb = 3; #endif #endif @@ -348,7 +348,16 @@ void CNAME(enum CBLAS_ORDER order, enum CBLAS_TRANSPOSE * transa_array, enum CB #endif #ifdef SMALL_MATRIX_OPT - if (MNK <= 100.0*100.0*100.0){ +#if !defined(COMPLEX) + if (*(FLOAT *)(group_alpha) != ZERO && + GEMM_SMALL_MATRIX_PERMIT(group_transa, group_transb, group_m, group_n, group_k, + *(FLOAT *)(group_alpha), *(FLOAT *)(group_beta))){ +#else + if (((FLOAT *)(group_alpha))[0] != ZERO && + GEMM_SMALL_MATRIX_PERMIT(group_transa, group_transb, group_m, group_n, group_k, + ((FLOAT *)(group_alpha))[0], ((FLOAT *)(group_alpha))[1], + ((FLOAT *)(group_beta))[0], ((FLOAT *)(group_beta))[1])){ +#endif group_routine=NULL; #if !defined(COMPLEX) if(*(FLOAT *)(group_beta) == 0.0){ @@ -388,16 +397,15 @@ void CNAME(enum CBLAS_ORDER order, enum CBLAS_TRANSPOSE * transa_array, enum CB args_array[count].beta=group_beta; #if defined(CBLAS) - if (order == CblasColMajor) { - args_array[count].a=(a_array[matrix_idx+j]); - args_array[count].b=(b_array[matrix_idx+j]); - }else if(order == CblasRowMajor){ -#endif + if (order == CblasRowMajor) { args_array[count].a=(b_array[matrix_idx+j]); args_array[count].b=(a_array[matrix_idx+j]); -#if defined(CBLAS) - } + } else #endif + { + args_array[count].a=(a_array[matrix_idx+j]); + args_array[count].b=(b_array[matrix_idx+j]); + } args_array[count].c=(c_array[matrix_idx+j]); diff --git a/interface/gemm_batch_strided.c b/interface/gemm_batch_strided.c index f711b77b6c..841933e80a 100644 --- a/interface/gemm_batch_strided.c +++ b/interface/gemm_batch_strided.c @@ -311,19 +311,19 @@ void CNAME(enum CBLAS_ORDER order, enum CBLAS_TRANSPOSE transa, enum CBLAS_TRANS group_ldb = ldb; group_ldc = ldc; - if (tb == 'N') group_transa = 0; - if (tb == 'T') group_transa = 1; + if (ta == 'N') group_transa = 0; + if (ta == 'T') group_transa = 1; #ifndef COMPLEX - if (tb == 'C') group_transa = 1; + if (ta == 'C') group_transa = 1; #else - if (tb == 'C') group_transa = 3; + if (ta == 'C') group_transa = 3; #endif - if (ta == 'N') group_transb = 0; - if (ta == 'T') group_transb = 1; + if (tb == 'N') group_transb = 0; + if (tb == 'T') group_transb = 1; #ifndef COMPLEX - if (ta == 'C') group_transb = 1; + if (tb == 'C') group_transb = 1; #else - if (ta == 'C') group_transb = 3; + if (tb == 'C') group_transb = 3; #endif #endif @@ -352,7 +352,8 @@ void CNAME(enum CBLAS_ORDER order, enum CBLAS_TRANSPOSE transa, enum CBLAS_TRANS return; } - if (group_m == 0 || group_n == 0) continue; + /* Every member shares M and N: an empty member means an empty batch. */ + if (group_m == 0 || group_n == 0) { free(args_array); return; } group_mode=mode; @@ -361,7 +362,16 @@ void CNAME(enum CBLAS_ORDER order, enum CBLAS_TRANSPOSE transa, enum CBLAS_TRANS #endif #ifdef SMALL_MATRIX_OPT - if (MNK <= 100.0*100.0*100.0){ +#if !defined(COMPLEX) + if (*(FLOAT *)(&alpha) != ZERO && + GEMM_SMALL_MATRIX_PERMIT(group_transa, group_transb, group_m, group_n, group_k, + *(FLOAT *)(&alpha), *(FLOAT *)(&beta))){ +#else + if (((FLOAT *)(alpha))[0] != ZERO && + GEMM_SMALL_MATRIX_PERMIT(group_transa, group_transb, group_m, group_n, group_k, + ((FLOAT *)(alpha))[0], ((FLOAT *)(alpha))[1], + ((FLOAT *)(beta))[0], ((FLOAT *)(beta))[1])){ +#endif group_routine=NULL; #if !defined(COMPLEX) if(beta == 0.0){