Browse Source

Restore locking optimizations for OpenMP case

restore another accidentally dropped part of #1468 that was missed in #2004 to address performance regression reported in #1461
tags/v0.3.6^2
Martin Kroeker GitHub 6 years ago
parent
commit
af480b02a4
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 17 additions and 10 deletions
  1. +17
    -10
      driver/others/memory.c

+ 17
- 10
driver/others/memory.c View File

@@ -2647,21 +2647,26 @@ void *blas_memory_alloc(int procpos){


position = 0; position = 0;


#if defined(SMP) && !defined(USE_OPENMP)
LOCK_COMMAND(&alloc_lock); LOCK_COMMAND(&alloc_lock);
#endif
do { do {
/* if (!memory[position].used) { */
/* blas_lock(&memory[position].lock);*/

#if defined(USE_OPENMP)
if (!memory[position].used) {
blas_lock(&memory[position].lock);
#endif
if (!memory[position].used) goto allocation; if (!memory[position].used) goto allocation;
/* blas_unlock(&memory[position].lock);*/
/* } */

#if defined(USE_OPENMP)
blas_unlock(&memory[position].lock);
}
#endif
position ++; position ++;


} while (position < NUM_BUFFERS); } while (position < NUM_BUFFERS);
UNLOCK_COMMAND(&alloc_lock);

#if defined(SMP) && !defined(USE_OPENMP)
UNLOCK_COMMAND(&alloc_lock);
#endif
goto error; goto error;


allocation : allocation :
@@ -2671,9 +2676,11 @@ void *blas_memory_alloc(int procpos){
#endif #endif


memory[position].used = 1; memory[position].used = 1;
#if defined(SMP) && !defined(USE_OPENMP)
UNLOCK_COMMAND(&alloc_lock); UNLOCK_COMMAND(&alloc_lock);

#else
blas_unlock(&memory[position].lock);
#endif
if (!memory[position].addr) { if (!memory[position].addr) {
do { do {
#ifdef DEBUG #ifdef DEBUG


Loading…
Cancel
Save