|
|
|
@@ -528,6 +528,15 @@ static int gemm_driver(blas_arg_t *args, BLASLONG *range_m, BLASLONG |
|
|
|
*range_n, FLOAT *sa, FLOAT *sb, |
|
|
|
BLASLONG nthreads_m, BLASLONG nthreads_n) { |
|
|
|
|
|
|
|
#ifndef USE_OPENMP |
|
|
|
#ifndef OS_WINDOWS |
|
|
|
static pthread_mutex_t level3_lock = PTHREAD_MUTEX_INITIALIZER; |
|
|
|
#else |
|
|
|
CRITICAL_SECTION level3_lock; |
|
|
|
InitializeCriticalSection((PCRITICAL_SECTION)&level3_lock); |
|
|
|
#endif |
|
|
|
#endif |
|
|
|
|
|
|
|
blas_arg_t newarg; |
|
|
|
|
|
|
|
#ifndef USE_ALLOC_HEAP |
|
|
|
@@ -568,6 +577,14 @@ static int gemm_driver(blas_arg_t *args, BLASLONG *range_m, BLASLONG |
|
|
|
#endif |
|
|
|
#endif |
|
|
|
|
|
|
|
#ifndef USE_OPENMP |
|
|
|
#ifndef OS_WINDOWS |
|
|
|
pthread_mutex_lock(&level3_lock); |
|
|
|
#else |
|
|
|
EnterCriticalSection((PCRITICAL_SECTION)&level3_lock); |
|
|
|
#endif |
|
|
|
#endif |
|
|
|
|
|
|
|
#ifdef USE_ALLOC_HEAP |
|
|
|
/* Dynamically allocate workspace */ |
|
|
|
job = (job_t*)malloc(MAX_CPU_NUMBER * sizeof(job_t)); |
|
|
|
@@ -693,6 +710,14 @@ static int gemm_driver(blas_arg_t *args, BLASLONG *range_m, BLASLONG |
|
|
|
free(job); |
|
|
|
#endif |
|
|
|
|
|
|
|
#ifndef USE_OPENMP |
|
|
|
#ifndef OS_WINDOWS |
|
|
|
pthread_mutex_unlock(&level3_lock); |
|
|
|
#else |
|
|
|
LeaveCriticalSection((PCRITICAL_SECTION)&level3_lock); |
|
|
|
#endif |
|
|
|
#endif |
|
|
|
|
|
|
|
return 0; |
|
|
|
} |
|
|
|
|
|
|
|
|