diff --git a/common_thread.h b/common_thread.h index a18df0d78..9de901826 100644 --- a/common_thread.h +++ b/common_thread.h @@ -53,6 +53,7 @@ extern void goto_set_num_threads(int nthreads); /* Global Parameter */ extern int blas_cpu_number; extern int blas_num_threads; +extern int blas_num_threads_set; extern int blas_omp_linked; #define BLAS_LEGACY 0x8000U @@ -137,9 +138,13 @@ typedef struct blas_queue { extern int blas_server_avail; static __inline int num_cpu_avail(int level) { +int openmp_nthreads; #ifdef USE_OPENMP - int openmp_nthreads=omp_get_max_threads(); + if (blas_num_threads_set == 0) + openmp_nthreads=omp_get_max_threads(); + else + openmp_nthreads=blas_cpu_number; #endif #ifndef USE_OPENMP diff --git a/driver/others/blas_server_omp.c b/driver/others/blas_server_omp.c index e06ab8404..c97900f1f 100644 --- a/driver/others/blas_server_omp.c +++ b/driver/others/blas_server_omp.c @@ -100,6 +100,8 @@ static void adjust_thread_buffers() { void goto_set_num_threads(int num_threads) { + blas_num_threads_set = 1; + if (num_threads < 0) blas_num_threads_set = 0; if (num_threads < 1) num_threads = blas_num_threads; if (num_threads > MAX_CPU_NUMBER) num_threads = MAX_CPU_NUMBER; diff --git a/driver/others/memory.c b/driver/others/memory.c index be7450585..4493b7d71 100644 --- a/driver/others/memory.c +++ b/driver/others/memory.c @@ -422,6 +422,8 @@ This value is equal or large than blas_cpu_number. This means some threads are s */ int blas_num_threads = 0; +int blas_num_threads_set = 0; + int goto_get_num_procs (void) { return blas_cpu_number; } @@ -1994,6 +1996,8 @@ This value is equal or large than blas_cpu_number. This means some threads are s */ int blas_num_threads = 0; +int blas_num_threads_set = 0; + int goto_get_num_procs (void) { return blas_cpu_number; } diff --git a/driver/others/memory_qalloc.c b/driver/others/memory_qalloc.c index 6174d9b75..0b38d1887 100644 --- a/driver/others/memory_qalloc.c +++ b/driver/others/memory_qalloc.c @@ -283,6 +283,7 @@ The numbers of threads in the thread pool. This value is equal or large than blas_cpu_number. This means some threads are sleep. */ int blas_num_threads = 0; +int blas_num_threads_set = 0; int goto_get_num_procs (void) { return blas_cpu_number;