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.
This commit is contained in:
Xianyi Zhang 2011-10-16 22:56:19 +08:00
parent 66a3c6df4e
commit ba31b19c00
1 changed files with 16 additions and 0 deletions

View File

@ -39,6 +39,11 @@
#ifndef COMMON_THREAD #ifndef COMMON_THREAD
#define COMMON_THREAD #define COMMON_THREAD
#ifdef USE_OPENMP
#include <omp.h>
extern void goto_set_num_threads(int nthreads);
#endif
/* Basic Thread Debugging */ /* Basic Thread Debugging */
#undef SMP_DEBUG #undef SMP_DEBUG
@ -126,6 +131,10 @@ extern int blas_server_avail;
static __inline int num_cpu_avail(int level) { static __inline int num_cpu_avail(int level) {
#ifdef USE_OPENMP
int openmp_nthreads=0;
#endif
if ((blas_cpu_number == 1) if ((blas_cpu_number == 1)
#ifdef USE_OPENMP #ifdef USE_OPENMP
@ -133,6 +142,13 @@ static __inline int num_cpu_avail(int level) {
#endif #endif
) return 1; ) 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; return blas_cpu_number;
} }