@@ -33,6 +33,7 @@ set(COMMON_SOURCES | |||
xerbla.c | |||
openblas_set_num_threads.c | |||
openblas_error_handle.c | |||
openblas_env.c | |||
openblas_get_num_procs.c | |||
openblas_get_num_threads.c | |||
) | |||
@@ -1,7 +1,7 @@ | |||
TOPDIR = ../.. | |||
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) | |||
@@ -92,6 +92,8 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
#endif | |||
#endif | |||
extern unsigned int openblas_thread_timeout(); | |||
#ifdef SMP_SERVER | |||
#undef MONITOR | |||
@@ -524,6 +526,7 @@ static int blas_monitor(void *arg){ | |||
int blas_thread_init(void){ | |||
BLASLONG i; | |||
int ret; | |||
int thread_timeout_env; | |||
#ifdef NEED_STACKATTR | |||
pthread_attr_t attr; | |||
#endif | |||
@@ -540,22 +543,12 @@ int blas_thread_init(void){ | |||
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++){ | |||
@@ -294,8 +294,11 @@ void openblas_fork_handler() | |||
#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){ | |||
env_var_t p; | |||
#if defined(OS_LINUX) || defined(OS_WINDOWS) || defined(OS_FREEBSD) || defined(OS_DARWIN) || defined(OS_ANDROID) | |||
int max_num; | |||
#endif | |||
@@ -310,18 +313,18 @@ int blas_get_cpu_number(void){ | |||
blas_goto_num = 0; | |||
#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) { | |||
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 | |||
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_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 */ | |||
static int gotoblas_initialized = 0; | |||
extern void openblas_read_env(); | |||
void CONSTRUCTOR gotoblas_init(void) { | |||
@@ -1349,6 +1353,8 @@ void CONSTRUCTOR gotoblas_init(void) { | |||
openblas_fork_handler(); | |||
#endif | |||
openblas_read_env(); | |||
#ifdef PROFILE | |||
moncontrol (0); | |||
#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" | |||
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) { | |||
int current_verbose; | |||
@@ -40,6 +40,7 @@ | |||
#include <string.h> | |||
#include "common.h" | |||
extern int openblas_block_factor(); | |||
int get_L2_size(void); | |||
#define DEFAULT_GEMM_P 128 | |||
@@ -249,7 +250,6 @@ int get_L2_size(void){ | |||
void blas_set_parameter(void){ | |||
env_var_t p; | |||
int factor; | |||
#if defined(BULLDOZER) || defined(PILEDRIVER) || defined(SANDYBRIDGE) || defined(NEHALEM) || defined(HASWELL) || defined(STEAMROLLER) | |||
int size = 16; | |||
@@ -468,9 +468,8 @@ void blas_set_parameter(void){ | |||
#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 > 200) factor = 200; | |||