Ref #62. In OpenMP implementation, check the return value of omp_get_max_threads().
authorXianyi Zhang <xianyi@iscas.ac.cn>
Sun, 16 Oct 2011 14:56:19 +0000 (22:56 +0800)
committerXianyi Zhang <xianyi@iscas.ac.cn>
Sun, 16 Oct 2011 15:00:43 +0000 (23:00 +0800)
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

index d74af32..dc963a6 100644 (file)
 #ifndef COMMON_THREAD
 #define COMMON_THREAD
 
+#ifdef USE_OPENMP
+#include <omp.h>
+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;
 
 }