|
44 | 44 | #endif
|
45 | 45 |
|
46 | 46 | #ifndef COMPLEX
|
| 47 | +#define SMP_THRESHOLD_MIN 109944. |
47 | 48 | #ifdef XDOUBLE
|
48 | 49 | #define ERROR_NAME "QSYRK "
|
49 | 50 | #elif defined(DOUBLE)
|
|
52 | 53 | #define ERROR_NAME "SSYRK "
|
53 | 54 | #endif
|
54 | 55 | #else
|
| 56 | +#define SMP_THRESHOLD_MIN 14824. |
55 | 57 | #ifndef HEMM
|
56 | 58 | #ifdef XDOUBLE
|
57 | 59 | #define ERROR_NAME "XSYRK "
|
|
71 | 73 | #endif
|
72 | 74 | #endif
|
73 | 75 |
|
| 76 | +#ifndef GEMM_MULTITHREAD_THRESHOLD |
| 77 | +#define GEMM_MULTITHREAD_THRESHOLD 4 |
| 78 | +#endif |
| 79 | + |
74 | 80 | static int (*syrk[])(blas_arg_t *, BLASLONG *, BLASLONG *, FLOAT *, FLOAT *, BLASLONG) = {
|
75 | 81 | #ifndef HEMM
|
76 | 82 | SYRK_UN, SYRK_UC, SYRK_LN, SYRK_LC,
|
@@ -101,6 +107,7 @@ void NAME(char *UPLO, char *TRANS,
|
101 | 107 | FLOAT *sa, *sb;
|
102 | 108 |
|
103 | 109 | #ifdef SMP
|
| 110 | + int NNK; |
104 | 111 | #ifdef USE_SIMPLE_THREADED_LEVEL3
|
105 | 112 | #ifndef COMPLEX
|
106 | 113 | #ifdef XDOUBLE
|
@@ -225,6 +232,8 @@ void CNAME(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE Tr
|
225 | 232 | FLOAT *sa, *sb;
|
226 | 233 |
|
227 | 234 | #ifdef SMP
|
| 235 | +int NNK; |
| 236 | + |
228 | 237 | #ifdef USE_SIMPLE_THREADED_LEVEL3
|
229 | 238 | #ifndef COMPLEX
|
230 | 239 | #ifdef XDOUBLE
|
@@ -354,26 +363,20 @@ void CNAME(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, enum CBLAS_TRANSPOSE Tr
|
354 | 363 | #endif
|
355 | 364 |
|
356 | 365 | args.common = NULL;
|
357 |
| -#ifndef COMPLEX |
358 |
| -#ifdef DOUBLE |
359 |
| - if (args.n < 100) |
360 |
| -#else |
361 |
| - if (args.n < 200) |
362 |
| -#endif |
363 |
| -#else |
364 |
| - if (args.n < 65) |
365 |
| -#endif |
| 366 | + |
| 367 | + NNK = (double)(args.n+1)*(double)args.n*(double)args.k; |
| 368 | + if (NNK <= (SMP_THRESHOLD_MIN * GEMM_MULTITHREAD_THRESHOLD)) { |
366 | 369 | args.nthreads = 1;
|
367 |
| - else |
| 370 | + } else { |
368 | 371 | args.nthreads = num_cpu_avail(3);
|
| 372 | + } |
369 | 373 |
|
370 | 374 | if (args.nthreads == 1) {
|
371 | 375 | #endif
|
372 | 376 |
|
373 | 377 | (syrk[(uplo << 1) | trans ])(&args, NULL, NULL, sa, sb, 0);
|
374 | 378 |
|
375 | 379 | #ifdef SMP
|
376 |
| - |
377 | 380 | } else {
|
378 | 381 |
|
379 | 382 | #ifndef USE_SIMPLE_THREADED_LEVEL3
|
|
0 commit comments