Browse Source

Add multithreading threshold

tags/v0.3.22^2
Martin Kroeker GitHub 2 years ago
parent
commit
f2d6b1c70e
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 18 additions and 4 deletions
  1. +18
    -4
      interface/symm.c

+ 18
- 4
interface/symm.c View File

@@ -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


Loading…
Cancel
Save