| @@ -44,6 +44,7 @@ | |||||
| #endif | #endif | ||||
| #ifndef COMPLEX | #ifndef COMPLEX | ||||
| #define SMP_THRESHOLD_MIN 65536. | |||||
| #ifdef XDOUBLE | #ifdef XDOUBLE | ||||
| #define ERROR_NAME "QSYMM " | #define ERROR_NAME "QSYMM " | ||||
| #elif defined(DOUBLE) | #elif defined(DOUBLE) | ||||
| @@ -52,6 +53,7 @@ | |||||
| #define ERROR_NAME "SSYMM " | #define ERROR_NAME "SSYMM " | ||||
| #endif | #endif | ||||
| #else | #else | ||||
| #define SMP_THRESHOLD_MIN 8192. | |||||
| #ifndef GEMM3M | #ifndef GEMM3M | ||||
| #ifndef HEMM | #ifndef HEMM | ||||
| #ifdef XDOUBLE | #ifdef XDOUBLE | ||||
| @@ -91,6 +93,10 @@ | |||||
| #endif | #endif | ||||
| #endif | #endif | ||||
| #ifndef GEMM_MULTITHREAD_THRESHOLD | |||||
| #define GEMM_MULTITHREAD_THRESHOLD 4 | |||||
| #endif | |||||
| #ifdef SMP | #ifdef SMP | ||||
| #ifndef COMPLEX | #ifndef COMPLEX | ||||
| @@ -159,7 +165,9 @@ void NAME(char *SIDE, char *UPLO, | |||||
| #if defined(SMP) && !defined(NO_AFFINITY) | #if defined(SMP) && !defined(NO_AFFINITY) | ||||
| int nodes; | int nodes; | ||||
| #endif | #endif | ||||
| # if defined(SMP) | |||||
| int MN; | |||||
| #endif | |||||
| blasint info; | blasint info; | ||||
| int side; | int side; | ||||
| int uplo; | int uplo; | ||||
| @@ -255,6 +263,9 @@ void CNAME(enum CBLAS_ORDER order, enum CBLAS_SIDE Side, enum CBLAS_UPLO Uplo, | |||||
| #if defined(SMP) && !defined(NO_AFFINITY) | #if defined(SMP) && !defined(NO_AFFINITY) | ||||
| int nodes; | int nodes; | ||||
| #endif | #endif | ||||
| #if defined(SMP) | |||||
| int MN; | |||||
| #endif | |||||
| PRINT_DEBUG_CNAME; | PRINT_DEBUG_CNAME; | ||||
| @@ -375,15 +386,18 @@ void CNAME(enum CBLAS_ORDER order, enum CBLAS_SIDE Side, enum CBLAS_UPLO Uplo, | |||||
| #ifdef SMP | #ifdef SMP | ||||
| args.common = NULL; | args.common = NULL; | ||||
| args.nthreads = num_cpu_avail(3); | |||||
| MN = 2.* (double) args.m * (double)args.m * (double) args.n; | |||||
| if (MN <= (SMP_THRESHOLD_MIN * (double) GEMM_MULTITHREAD_THRESHOLD) ) { | |||||
| args.nthreads = 1; | |||||
| } else { | |||||
| args.nthreads = num_cpu_avail(3); | |||||
| } | |||||
| if (args.nthreads == 1) { | if (args.nthreads == 1) { | ||||
| #endif | #endif | ||||
| (symm[(side << 1) | uplo ])(&args, NULL, NULL, sa, sb, 0); | (symm[(side << 1) | uplo ])(&args, NULL, NULL, sa, sb, 0); | ||||
| #ifdef SMP | #ifdef SMP | ||||
| } else { | } else { | ||||
| #ifndef NO_AFFINITY | #ifndef NO_AFFINITY | ||||