Shift transition to multithreading towards larger matrix sizes
authorMartin Kroeker <martin@ruby.chemie.uni-freiburg.de>
Fri, 18 Jan 2019 23:10:01 +0000 (00:10 +0100)
committerGitHub <noreply@github.com>
Fri, 18 Jan 2019 23:10:01 +0000 (00:10 +0100)
See #1886 and JuliaRobotics issue 500. trsm benchmarks on Haswell and Zen showed that with these values performance is roughly doubled for matrix sizes between 8x8 and 14x14, and still 10 to 20 percent better near the new cutoff at 32x32.

interface/trsm.c

index 5c2750e..faec03a 100644 (file)
 #endif
 #endif
 
+#ifndef COMPLEX
+#define SMP_FACTOR 8
+#else
+#define SMP_FACTOR 4
+#endif
+
 static int (*trsm[])(blas_arg_t *, BLASLONG *, BLASLONG *, FLOAT *, FLOAT *, BLASLONG) = {
 #ifndef TRMM
   TRSM_LNUU, TRSM_LNUN, TRSM_LNLU, TRSM_LNLN,
@@ -366,10 +372,10 @@ void CNAME(enum CBLAS_ORDER order,
   mode |= (trans << BLAS_TRANSA_SHIFT);
   mode |= (side  << BLAS_RSIDE_SHIFT);
 
-  if ( args.m < 2*GEMM_MULTITHREAD_THRESHOLD )
+  if ( args.m < SMP_FACTOR * GEMM_MULTITHREAD_THRESHOLD )
        args.nthreads = 1;
   else
-       if ( args.n < 2*GEMM_MULTITHREAD_THRESHOLD )
+       if ( args.n < SMP_FACTOR * GEMM_MULTITHREAD_THRESHOLD )
                args.nthreads = 1;
   else
        args.nthreads = num_cpu_avail(3);