#endif
#ifndef COMPLEX
+#define SMP_THRESHOLD_MIN 65536.0
#ifdef XDOUBLE
#define ERROR_NAME "QGEMM "
#elif defined(DOUBLE)
#define ERROR_NAME "SGEMM "
#endif
#else
+#define SMP_THRESHOLD_MIN 8192.0
#ifndef GEMM3M
#ifdef XDOUBLE
#define ERROR_NAME "XGEMM "
FLOAT *sa, *sb;
#ifdef SMP
- int nthreads_max;
- int nthreads_avail;
double MNK;
#ifndef COMPLEX
#ifdef XDOUBLE
XFLOAT *sa, *sb;
#ifdef SMP
- int nthreads_max;
- int nthreads_avail;
double MNK;
#ifndef COMPLEX
#ifdef XDOUBLE
mode |= (transa << BLAS_TRANSA_SHIFT);
mode |= (transb << BLAS_TRANSB_SHIFT);
- nthreads_max = num_cpu_avail(3);
- nthreads_avail = nthreads_max;
-
-#ifndef COMPLEX
MNK = (double) args.m * (double) args.n * (double) args.k;
- if ( MNK <= (65536.0 * (double) GEMM_MULTITHREAD_THRESHOLD) )
- nthreads_max = 1;
-#else
- MNK = (double) args.m * (double) args.n * (double) args.k;
- if ( MNK <= (8192.0 * (double) GEMM_MULTITHREAD_THRESHOLD) )
- nthreads_max = 1;
-#endif
- args.common = NULL;
-
- if ( nthreads_max > nthreads_avail )
- args.nthreads = nthreads_avail;
+ if ( MNK <= (SMP_THRESHOLD_MIN * (double) GEMM_MULTITHREAD_THRESHOLD) )
+ args.nthreads = 1;
else
- args.nthreads = nthreads_max;
-
+ args.nthreads = num_cpu_avail(3);
+ args.common = NULL;
if (args.nthreads == 1) {
#endif
mode |= (trans << BLAS_TRANSA_SHIFT);
mode |= (side << BLAS_RSIDE_SHIFT);
- args.nthreads = num_cpu_avail(3);
if ( args.m < 2*GEMM_MULTITHREAD_THRESHOLD )
args.nthreads = 1;
else
if ( args.n < 2*GEMM_MULTITHREAD_THRESHOLD )
args.nthreads = 1;
+ else
+ args.nthreads = num_cpu_avail(3);
if (args.nthreads == 1) {