diff --git a/interface/gemm.c b/interface/gemm.c index 4778b641bb..0902bc0249 100644 --- a/interface/gemm.c +++ b/interface/gemm.c @@ -533,8 +533,12 @@ void CNAME(enum CBLAS_ORDER order, enum CBLAS_TRANSPOSE TransA, enum CBLAS_TRANS MNK = (double) args.m * (double) args.n * (double) args.k; if ( MNK <= (SMP_THRESHOLD_MIN * (double) GEMM_MULTITHREAD_THRESHOLD) ) args.nthreads = 1; - else + else { args.nthreads = num_cpu_avail(3); + if (MNK/args.nthreads < SMP_THRESHOLD_MIN*(double)GEMM_MULTITHREAD_THRESHOLD) + args.nthreads = MNK/(SMP_THRESHOLD_MIN*(double)GEMM_MULTITHREAD_THRESHOLD); + } + args.common = NULL; if (args.nthreads == 1) { diff --git a/interface/lapack/getrf.c b/interface/lapack/getrf.c index 323370ebc6..270604120f 100644 --- a/interface/lapack/getrf.c +++ b/interface/lapack/getrf.c @@ -95,14 +95,19 @@ int NAME(blasint *M, blasint *N, FLOAT *a, blasint *ldA, blasint *ipiv, blasint #ifdef SMP args.common = NULL; + #ifndef DOUBLE - if (args.m*args.n < 40000) -#else - if (args.m*args.n < 10000) + int nmax = 40000; +#else + int nmax = 10000; #endif - args.nthreads=1; - else - args.nthreads = num_cpu_avail(4); + if (args.m*args.n