| @@ -73,7 +73,7 @@ static DWORD blas_threads_id[MAX_CPU_NUMBER]; | |||
| static volatile int thread_target; // target num of live threads, volatile for cross-thread reads | |||
| // | |||
| // | |||
| // Legacy code path | |||
| // | |||
| static void legacy_exec(void *func, int mode, blas_arg_t *args, void *sb) { | |||
| @@ -369,11 +369,11 @@ int blas_thread_init(void) { | |||
| return 0; | |||
| } | |||
| /* | |||
| User can call one of two routines. | |||
| exec_blas_async ... immediately returns after jobs are queued. | |||
| exec_blas ... returns after jobs are finished. | |||
| */ | |||
| // | |||
| // User can call one of two routines. | |||
| // exec_blas_async ... immediately returns after jobs are queued. | |||
| // exec_blas ... returns after jobs are finished. | |||
| // | |||
| int exec_blas_async(BLASLONG pos, blas_queue_t *queue) { | |||
| #if defined(SMP_SERVER) | |||
| @@ -471,27 +471,32 @@ int exec_blas(BLASLONG num, blas_queue_t *queue) { | |||
| if ((num <= 0) || (queue == NULL)) return 0; | |||
| if ((num > 1) && queue -> next) exec_blas_async(1, queue -> next); | |||
| if ((num > 1) && queue -> next) | |||
| exec_blas_async(1, queue -> next); | |||
| routine = queue -> routine; | |||
| if (queue -> mode & BLAS_LEGACY) { | |||
| legacy_exec(routine, queue -> mode, queue -> args, queue -> sb); | |||
| } else | |||
| } else { | |||
| if (queue -> mode & BLAS_PTHREAD) { | |||
| void (*pthreadcompat)(void *) = queue -> routine; | |||
| (pthreadcompat)(queue -> args); | |||
| } else | |||
| (routine)(queue -> args, queue -> range_m, queue -> range_n, | |||
| queue -> sa, queue -> sb, 0); | |||
| queue -> sa, queue -> sb, 0); | |||
| } | |||
| if ((num > 1) && queue -> next) exec_blas_async_wait(num - 1, queue -> next); | |||
| if ((num > 1) && queue -> next) | |||
| exec_blas_async_wait(num - 1, queue -> next); | |||
| return 0; | |||
| } | |||
| // | |||
| // Shutdown procedure, but user don't have to call this routine. The | |||
| // kernel automatically kill threads. | |||
| // | |||
| int BLASFUNC(blas_thread_shutdown)(void) { | |||
| int i; | |||
| @@ -502,7 +507,7 @@ int BLASFUNC(blas_thread_shutdown)(void) { | |||
| if (blas_server_avail) { | |||
| for(i = 0; i < blas_num_threads - 1; i++) { | |||
| for (i = 0; i < blas_num_threads - 1; i++) { | |||
| // Could also just use WaitForMultipleObjects | |||
| DWORD wait_thread_value = WaitForSingleObject(blas_threads[i], 50); | |||
| @@ -524,6 +529,9 @@ int BLASFUNC(blas_thread_shutdown)(void) { | |||
| return 0; | |||
| } | |||
| // | |||
| // Legacy function to set numbef of threads | |||
| // | |||
| void goto_set_num_threads(int num_threads) | |||
| { | |||
| long i; | |||
| @@ -577,7 +585,7 @@ void goto_set_num_threads(int num_threads) | |||
| blas_server_avail = 1; | |||
| } | |||
| for(i = (blas_num_threads > 0) ? blas_num_threads - 1 : 0; i < num_threads - 1; i++) { | |||
| for (i = (blas_num_threads > 0) ? blas_num_threads - 1 : 0; i < num_threads - 1; i++) { | |||
| //MT_TRACE("set_num_threads: creating thread [%d]\n", i); | |||
| blas_threads[i] = CreateThread(NULL, 0, | |||
| @@ -593,6 +601,9 @@ void goto_set_num_threads(int num_threads) | |||
| blas_cpu_number = num_threads; | |||
| } | |||
| // | |||
| // Openblas function to set thread count | |||
| // | |||
| void openblas_set_num_threads(int num) | |||
| { | |||
| goto_set_num_threads(num); | |||