static _Bool blas_buffer_inuse[MAX_PARALLEL_NUMBER];
#endif
-void goto_set_num_threads(int num_threads) {
+static void adjust_thread_buffers() {
int i=0, j=0;
+ //adjust buffer for each thread
+ for(i=0; i < MAX_PARALLEL_NUMBER; i++) {
+ for(j=0; j < blas_cpu_number; j++){
+ if(blas_thread_buffer[i][j] == NULL){
+ blas_thread_buffer[i][j] = blas_memory_alloc(2);
+ }
+ }
+ for(; j < MAX_CPU_NUMBER; j++){
+ if(blas_thread_buffer[i][j] != NULL){
+ blas_memory_free(blas_thread_buffer[i][j]);
+ blas_thread_buffer[i][j] = NULL;
+ }
+ }
+ }
+}
+
+void goto_set_num_threads(int num_threads) {
+
if (num_threads < 1) num_threads = blas_num_threads;
if (num_threads > MAX_CPU_NUMBER) num_threads = MAX_CPU_NUMBER;
omp_set_num_threads(blas_cpu_number);
- //adjust buffer for each thread
- for(i=0; i<MAX_PARALLEL_NUMBER; i++) {
- for(j=0; j<blas_cpu_number; j++){
- if(blas_thread_buffer[i][j]==NULL){
- blas_thread_buffer[i][j]=blas_memory_alloc(2);
- }
- }
- for(; j<MAX_CPU_NUMBER; j++){
- if(blas_thread_buffer[i][j]!=NULL){
- blas_memory_free(blas_thread_buffer[i][j]);
- blas_thread_buffer[i][j]=NULL;
- }
- }
- }
+ adjust_thread_buffers();
#if defined(ARCH_MIPS64)
//set parameters for different number of threads.
blas_set_parameter();
int blas_thread_init(void){
- int i=0, j=0;
-
blas_get_cpu_number();
- blas_server_avail = 1;
+ adjust_thread_buffers();
- for(i=0; i<MAX_PARALLEL_NUMBER; i++) {
- for(j=0; j<blas_num_threads; j++){
- blas_thread_buffer[i][j]=blas_memory_alloc(2);
- }
- for(; j<MAX_CPU_NUMBER; j++){
- blas_thread_buffer[i][j]=NULL;
- }
- }
+ blas_server_avail = 1;
return 0;
}