From ba31b19c00550673410250f6b33aa70f7a4fa400 Mon Sep 17 00:00:00 2001 From: Xianyi Zhang Date: Sun, 16 Oct 2011 22:56:19 +0800 Subject: [PATCH] Ref #62. In OpenMP implementation, check the return value of omp_get_max_threads(). It makes sure the return value as same as blas_cpu_numbers which is an internal global variable to store the number of threads in OpenBLAS. --- common_thread.h | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/common_thread.h b/common_thread.h index d74af32..dc963a6 100644 --- a/common_thread.h +++ b/common_thread.h @@ -39,6 +39,11 @@ #ifndef COMMON_THREAD #define COMMON_THREAD +#ifdef USE_OPENMP +#include +extern void goto_set_num_threads(int nthreads); +#endif + /* Basic Thread Debugging */ #undef SMP_DEBUG @@ -126,6 +131,10 @@ extern int blas_server_avail; static __inline int num_cpu_avail(int level) { +#ifdef USE_OPENMP + int openmp_nthreads=0; +#endif + if ((blas_cpu_number == 1) #ifdef USE_OPENMP @@ -133,6 +142,13 @@ static __inline int num_cpu_avail(int level) { #endif ) return 1; +#ifdef USE_OPENMP + openmp_nthreads=omp_get_max_threads(); + if (blas_cpu_number != openmp_nthreads) { + goto_set_num_threads(openmp_nthreads); + } +#endif + return blas_cpu_number; } -- 2.7.4