# time out to improve performance. This number should be from 4 to 30
# which corresponds to (1 << n) cycles. For example, if you set to 26,
# thread will be running for (1 << 26) cycles(about 25ms on 3.0GHz
-# system). Also you can control this mumber by GOTO_THREAD_TIMEOUT
+# system). Also you can control this mumber by THREAD_TIMEOUT
# CCOMMON_OPT += -DTHREAD_TIMEOUT=26
# Using special device driver for mapping physically contigous memory
4.Usages
Link with libopenblas.a or -lopenblas for shared library.
-Set the number of threads. for example,
+4.1 Set the number of threads with environment variables. for example,
export OPENBLAS_NUM_THREADS=4
+ or
+export GOTO_NUM_THREADS=4
or
export OMP_NUM_THREADS=4
-OPENBLAS_NUM_THREAD is prior to OMP_NUM_THREADS.
+
+The priorities are OPENBLAS_NUM_THREAD > GOTO_NUM_THREADS > OMP_NUM_THREADS.
+
+4.2 Set the number of threads with calling functions. for example,
+void goto_set_num_threads(int num_threads);
+or
+void openblas_set_num_threads(int num_threads);
5.Report Bugs
Please add a issue in https://github.com/xianyi/OpenBLAS/issues
if (thread_timeout < 4) thread_timeout = 4;
if (thread_timeout > 30) thread_timeout = 30;
thread_timeout = (1 << thread_timeout);
- }
+ }else{
+ p = getenv("GOTO_THREAD_TIMEOUT");
+ if (p) {
+ thread_timeout = atoi(p);
+ if (thread_timeout < 4) thread_timeout = 4;
+ if (thread_timeout > 30) thread_timeout = 30;
+ thread_timeout = (1 << thread_timeout);
+ }
+ }
+
for(i = 0; i < blas_num_threads - 1; i++){
}
+void openblas_set_num_threads(int num_threads) {
+ goto_set_num_threads(num_threads);
+
+}
+
/* Compatible function with pthread_create / join */
int gotoblas_pthread(int numthreads, void *function, void *args, int stride) {
numprocs = 0;
#else
numprocs = readenv("OPENBLAS_NUM_THREADS");
+ if (numprocs == 0) numprocs = readenv("GOTO_NUM_THREADS");
#endif
if (numprocs == 0) numprocs = readenv("OMP_NUM_THREADS");
setup_mempolicy();
- if (readenv("OPENBLAS_MAIN_FREE")) {
+ if (readenv("OPENBLAS_MAIN_FREE") || readenv("GOTOBLAS_MAIN_FREE")) {
sched_setaffinity(0, sizeof(cpu_orig_mask), &cpu_orig_mask[0]);
}
p = getenv("OPENBLAS_NUM_THREADS");
if (p) blas_goto_num = atoi(p);
if (blas_goto_num < 0) blas_goto_num = 0;
+
+ if (blas_goto_num == 0) {
+ p = getenv("GOTO_NUM_THREADS");
+ if (p) blas_goto_num = atoi(p);
+ if (blas_goto_num < 0) blas_goto_num = 0;
+ }
+
#endif
blas_omp_num = 0;