@@ -33,6 +33,7 @@ set(COMMON_SOURCES | |||||
xerbla.c | xerbla.c | ||||
openblas_set_num_threads.c | openblas_set_num_threads.c | ||||
openblas_error_handle.c | openblas_error_handle.c | ||||
openblas_env.c | |||||
openblas_get_num_procs.c | openblas_get_num_procs.c | ||||
openblas_get_num_threads.c | openblas_get_num_threads.c | ||||
) | ) | ||||
@@ -1,7 +1,7 @@ | |||||
TOPDIR = ../.. | TOPDIR = ../.. | ||||
include ../../Makefile.system | include ../../Makefile.system | ||||
COMMONOBJS = memory.$(SUFFIX) xerbla.$(SUFFIX) c_abs.$(SUFFIX) z_abs.$(SUFFIX) openblas_set_num_threads.$(SUFFIX) openblas_get_num_threads.$(SUFFIX) openblas_get_num_procs.$(SUFFIX) openblas_get_config.$(SUFFIX) openblas_get_parallel.$(SUFFIX) openblas_error_handle.$(SUFFIX) | |||||
COMMONOBJS = memory.$(SUFFIX) xerbla.$(SUFFIX) c_abs.$(SUFFIX) z_abs.$(SUFFIX) openblas_set_num_threads.$(SUFFIX) openblas_get_num_threads.$(SUFFIX) openblas_get_num_procs.$(SUFFIX) openblas_get_config.$(SUFFIX) openblas_get_parallel.$(SUFFIX) openblas_error_handle.$(SUFFIX) openblas_env.$(SUFFIX) | |||||
#COMMONOBJS += slamch.$(SUFFIX) slamc3.$(SUFFIX) dlamch.$(SUFFIX) dlamc3.$(SUFFIX) | #COMMONOBJS += slamch.$(SUFFIX) slamc3.$(SUFFIX) dlamch.$(SUFFIX) dlamc3.$(SUFFIX) | ||||
@@ -92,6 +92,8 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||||
#endif | #endif | ||||
#endif | #endif | ||||
extern unsigned int openblas_thread_timeout(); | |||||
#ifdef SMP_SERVER | #ifdef SMP_SERVER | ||||
#undef MONITOR | #undef MONITOR | ||||
@@ -524,6 +526,7 @@ static int blas_monitor(void *arg){ | |||||
int blas_thread_init(void){ | int blas_thread_init(void){ | ||||
BLASLONG i; | BLASLONG i; | ||||
int ret; | int ret; | ||||
int thread_timeout_env; | |||||
#ifdef NEED_STACKATTR | #ifdef NEED_STACKATTR | ||||
pthread_attr_t attr; | pthread_attr_t attr; | ||||
#endif | #endif | ||||
@@ -540,22 +543,12 @@ int blas_thread_init(void){ | |||||
if (!blas_server_avail){ | if (!blas_server_avail){ | ||||
env_var_t p; | |||||
if (readenv(p,"THREAD_TIMEOUT")) { | |||||
thread_timeout = atoi(p); | |||||
if (thread_timeout < 4) thread_timeout = 4; | |||||
if (thread_timeout > 30) thread_timeout = 30; | |||||
thread_timeout = (1 << thread_timeout); | |||||
}else{ | |||||
if (readenv(p,"GOTO_THREAD_TIMEOUT")) { | |||||
thread_timeout = atoi(p); | |||||
if (thread_timeout < 4) thread_timeout = 4; | |||||
if (thread_timeout > 30) thread_timeout = 30; | |||||
thread_timeout = (1 << thread_timeout); | |||||
} | |||||
} | |||||
thread_timeout_env=openblas_thread_timeout(); | |||||
if (thread_timeout_env>0) { | |||||
if (thread_timeout_env < 4) thread_timeout_env = 4; | |||||
if (thread_timeout_env > 30) thread_timeout_env = 30; | |||||
thread_timeout = (1 << thread_timeout_env); | |||||
} | |||||
for(i = 0; i < blas_num_threads - 1; i++){ | for(i = 0; i < blas_num_threads - 1; i++){ | ||||
@@ -294,8 +294,11 @@ void openblas_fork_handler() | |||||
#endif | #endif | ||||
} | } | ||||
extern int openblas_num_threads_env(); | |||||
extern int openblas_goto_num_threads_env(); | |||||
extern int openblas_omp_num_threads_env(); | |||||
int blas_get_cpu_number(void){ | int blas_get_cpu_number(void){ | ||||
env_var_t p; | |||||
#if defined(OS_LINUX) || defined(OS_WINDOWS) || defined(OS_FREEBSD) || defined(OS_DARWIN) || defined(OS_ANDROID) | #if defined(OS_LINUX) || defined(OS_WINDOWS) || defined(OS_FREEBSD) || defined(OS_DARWIN) || defined(OS_ANDROID) | ||||
int max_num; | int max_num; | ||||
#endif | #endif | ||||
@@ -310,18 +313,18 @@ int blas_get_cpu_number(void){ | |||||
blas_goto_num = 0; | blas_goto_num = 0; | ||||
#ifndef USE_OPENMP | #ifndef USE_OPENMP | ||||
if (readenv(p,"OPENBLAS_NUM_THREADS")) blas_goto_num = atoi(p); | |||||
blas_goto_num=openblas_num_threads_env(); | |||||
if (blas_goto_num < 0) blas_goto_num = 0; | if (blas_goto_num < 0) blas_goto_num = 0; | ||||
if (blas_goto_num == 0) { | if (blas_goto_num == 0) { | ||||
if (readenv(p,"GOTO_NUM_THREADS")) blas_goto_num = atoi(p); | |||||
if (blas_goto_num < 0) blas_goto_num = 0; | |||||
blas_goto_num=openblas_goto_num_threads_env(); | |||||
if (blas_goto_num < 0) blas_goto_num = 0; | |||||
} | } | ||||
#endif | #endif | ||||
blas_omp_num = 0; | blas_omp_num = 0; | ||||
if (readenv(p,"OMP_NUM_THREADS")) blas_omp_num = atoi(p); | |||||
blas_omp_num=openblas_omp_num_threads_env(); | |||||
if (blas_omp_num < 0) blas_omp_num = 0; | if (blas_omp_num < 0) blas_omp_num = 0; | ||||
if (blas_goto_num > 0) blas_num_threads = blas_goto_num; | if (blas_goto_num > 0) blas_num_threads = blas_goto_num; | ||||
@@ -1340,6 +1343,7 @@ static void gotoblas_memory_init(void) { | |||||
/* Initialization for all function; this function should be called before main */ | /* Initialization for all function; this function should be called before main */ | ||||
static int gotoblas_initialized = 0; | static int gotoblas_initialized = 0; | ||||
extern void openblas_read_env(); | |||||
void CONSTRUCTOR gotoblas_init(void) { | void CONSTRUCTOR gotoblas_init(void) { | ||||
@@ -1349,6 +1353,8 @@ void CONSTRUCTOR gotoblas_init(void) { | |||||
openblas_fork_handler(); | openblas_fork_handler(); | ||||
#endif | #endif | ||||
openblas_read_env(); | |||||
#ifdef PROFILE | #ifdef PROFILE | ||||
moncontrol (0); | moncontrol (0); | ||||
#endif | #endif | ||||
@@ -0,0 +1,84 @@ | |||||
/*************************************************************************** | |||||
Copyright (c) 2011-2016, The OpenBLAS Project | |||||
All rights reserved. | |||||
Redistribution and use in source and binary forms, with or without | |||||
modification, are permitted provided that the following conditions are | |||||
met: | |||||
1. Redistributions of source code must retain the above copyright | |||||
notice, this list of conditions and the following disclaimer. | |||||
2. Redistributions in binary form must reproduce the above copyright | |||||
notice, this list of conditions and the following disclaimer in | |||||
the documentation and/or other materials provided with the | |||||
distribution. | |||||
3. Neither the name of the OpenBLAS project nor the names of | |||||
its contributors may be used to endorse or promote products | |||||
derived from this software without specific prior written permission. | |||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||||
ARE DISCLAIMED. IN NO EVENT SHALL THE OPENBLAS PROJECT OR CONTRIBUTORS BE | |||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | |||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE | |||||
USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||||
*****************************************************************************/ | |||||
#include "common.h" | |||||
static int openblas_env_verbose=0; | |||||
static unsigned int openblas_env_thread_timeout=0; | |||||
static int openblas_env_block_factor=0; | |||||
static int openblas_env_openblas_num_threads=0; | |||||
static int openblas_env_goto_num_threads=0; | |||||
static int openblas_env_omp_num_threads=0; | |||||
int openblas_verbose() { return openblas_env_verbose;} | |||||
unsigned int openblas_thread_timeout() { return openblas_env_thread_timeout;} | |||||
int openblas_block_factor() { return openblas_env_block_factor;} | |||||
int openblas_num_threads_env() { return openblas_env_openblas_num_threads;} | |||||
int openblas_goto_num_threads_env() { return openblas_env_goto_num_threads;} | |||||
int openblas_omp_num_threads_env() { return openblas_env_omp_num_threads;} | |||||
void openblas_read_env() { | |||||
int ret=0; | |||||
env_var_t p; | |||||
if (readenv(p,"OPENBLAS_VERBOSE")) ret = atoi(p); | |||||
if(ret<0) ret=0; | |||||
openblas_env_verbose=ret; | |||||
ret=0; | |||||
if (readenv(p,"OPENBLAS_BLOCK_FACTOR")) ret = atoi(p); | |||||
if(ret<0) ret=0; | |||||
openblas_env_block_factor=ret; | |||||
ret=0; | |||||
if (readenv(p,"OPENBLAS_THREAD_TIMEOUT")) ret = atoi(p); | |||||
if(ret<0) ret=0; | |||||
openblas_env_thread_timeout=(unsigned int)ret; | |||||
ret=0; | |||||
if (readenv(p,"OPENBLAS_NUM_THREADS")) ret = atoi(p); | |||||
if(ret<0) ret=0; | |||||
openblas_env_openblas_num_threads=ret; | |||||
ret=0; | |||||
if (readenv(p,"GOTO_NUM_THREADS")) ret = atoi(p); | |||||
if(ret<0) ret=0; | |||||
openblas_env_goto_num_threads=ret; | |||||
ret=0; | |||||
if (readenv(p,"OMP_NUM_THREADS")) ret = atoi(p); | |||||
if(ret<0) ret=0; | |||||
openblas_env_omp_num_threads=ret; | |||||
} | |||||
@@ -33,13 +33,7 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||||
#include "common.h" | #include "common.h" | ||||
int openblas_verbose() { | |||||
int ret=0; | |||||
env_var_t p; | |||||
if (readenv(p,"OPENBLAS_VERBOSE")) ret = atoi(p); | |||||
if(ret<0) ret=0; | |||||
return ret; | |||||
} | |||||
extern int openblas_verbose(); | |||||
void openblas_warning(int verbose, const char * msg) { | void openblas_warning(int verbose, const char * msg) { | ||||
int current_verbose; | int current_verbose; | ||||
@@ -40,6 +40,7 @@ | |||||
#include <string.h> | #include <string.h> | ||||
#include "common.h" | #include "common.h" | ||||
extern int openblas_block_factor(); | |||||
int get_L2_size(void); | int get_L2_size(void); | ||||
#define DEFAULT_GEMM_P 128 | #define DEFAULT_GEMM_P 128 | ||||
@@ -249,7 +250,6 @@ int get_L2_size(void){ | |||||
void blas_set_parameter(void){ | void blas_set_parameter(void){ | ||||
env_var_t p; | |||||
int factor; | int factor; | ||||
#if defined(BULLDOZER) || defined(PILEDRIVER) || defined(SANDYBRIDGE) || defined(NEHALEM) || defined(HASWELL) || defined(STEAMROLLER) | #if defined(BULLDOZER) || defined(PILEDRIVER) || defined(SANDYBRIDGE) || defined(NEHALEM) || defined(HASWELL) || defined(STEAMROLLER) | ||||
int size = 16; | int size = 16; | ||||
@@ -468,9 +468,8 @@ void blas_set_parameter(void){ | |||||
#endif | #endif | ||||
#endif | #endif | ||||
if (readenv(p,"GOTO_BLOCK_FACTOR")) { | |||||
factor = atoi(p); | |||||
factor=openblas_block_factor(); | |||||
if (factor>0) { | |||||
if (factor < 10) factor = 10; | if (factor < 10) factor = 10; | ||||
if (factor > 200) factor = 200; | if (factor > 200) factor = 200; | ||||