|
|
@@ -455,11 +455,15 @@ static void *alloc_mmap(void *address){ |
|
|
|
} |
|
|
|
|
|
|
|
if (map_address != (void *)-1) { |
|
|
|
#if defined(SMP) && !defined(USE_OPENMP) |
|
|
|
LOCK_COMMAND(&alloc_lock); |
|
|
|
#endif |
|
|
|
release_info[release_pos].address = map_address; |
|
|
|
release_info[release_pos].func = alloc_mmap_free; |
|
|
|
release_pos ++; |
|
|
|
#if defined(SMP) && !defined(USE_OPENMP) |
|
|
|
UNLOCK_COMMAND(&alloc_lock); |
|
|
|
#endif |
|
|
|
} |
|
|
|
|
|
|
|
#ifdef OS_LINUX |
|
|
@@ -601,14 +605,18 @@ static void *alloc_mmap(void *address){ |
|
|
|
#if defined(OS_LINUX) && !defined(NO_WARMUP) |
|
|
|
} |
|
|
|
#endif |
|
|
|
LOCK_COMMAND(&alloc_lock); |
|
|
|
|
|
|
|
if (map_address != (void *)-1) { |
|
|
|
#if defined(SMP) && !defined(USE_OPENMP) |
|
|
|
LOCK_COMMAND(&alloc_lock); |
|
|
|
#endif |
|
|
|
release_info[release_pos].address = map_address; |
|
|
|
release_info[release_pos].func = alloc_mmap_free; |
|
|
|
release_pos ++; |
|
|
|
#if defined(SMP) && !defined(USE_OPENMP) |
|
|
|
UNLOCK_COMMAND(&alloc_lock); |
|
|
|
#endif |
|
|
|
} |
|
|
|
UNLOCK_COMMAND(&alloc_lock); |
|
|
|
|
|
|
|
return map_address; |
|
|
|
} |
|
|
@@ -1007,7 +1015,10 @@ void *blas_memory_alloc(int procpos){ |
|
|
|
NULL, |
|
|
|
}; |
|
|
|
void *(**func)(void *address); |
|
|
|
|
|
|
|
#if defined(SMP) && !defined(USE_OPENMP) |
|
|
|
LOCK_COMMAND(&alloc_lock); |
|
|
|
#endif |
|
|
|
|
|
|
|
if (!memory_initialized) { |
|
|
|
|
|
|
@@ -1041,7 +1052,9 @@ void *blas_memory_alloc(int procpos){ |
|
|
|
memory_initialized = 1; |
|
|
|
|
|
|
|
} |
|
|
|
#if defined(SMP) && !defined(USE_OPENMP) |
|
|
|
UNLOCK_COMMAND(&alloc_lock); |
|
|
|
#endif |
|
|
|
|
|
|
|
#ifdef DEBUG |
|
|
|
printf("Alloc Start ...\n"); |
|
|
@@ -1056,12 +1069,15 @@ void *blas_memory_alloc(int procpos){ |
|
|
|
|
|
|
|
do { |
|
|
|
if (!memory[position].used && (memory[position].pos == mypos)) { |
|
|
|
#if defined(SMP) && !defined(USE_OPENMP) |
|
|
|
LOCK_COMMAND(&alloc_lock); |
|
|
|
#endif |
|
|
|
/* blas_lock(&memory[position].lock);*/ |
|
|
|
|
|
|
|
if (!memory[position].used) goto allocation; |
|
|
|
|
|
|
|
#if defined(SMP) && !defined(USE_OPENMP) |
|
|
|
UNLOCK_COMMAND(&alloc_lock); |
|
|
|
#endif |
|
|
|
/* blas_unlock(&memory[position].lock);*/ |
|
|
|
} |
|
|
|
|
|
|
@@ -1076,12 +1092,15 @@ void *blas_memory_alloc(int procpos){ |
|
|
|
|
|
|
|
do { |
|
|
|
/* if (!memory[position].used) { */ |
|
|
|
#if defined(SMP) && !defined(USE_OPENMP) |
|
|
|
LOCK_COMMAND(&alloc_lock); |
|
|
|
#endif |
|
|
|
/* blas_lock(&memory[position].lock);*/ |
|
|
|
|
|
|
|
if (!memory[position].used) goto allocation; |
|
|
|
|
|
|
|
#if defined(SMP) && !defined(USE_OPENMP) |
|
|
|
UNLOCK_COMMAND(&alloc_lock); |
|
|
|
#endif |
|
|
|
/* blas_unlock(&memory[position].lock);*/ |
|
|
|
/* } */ |
|
|
|
|
|
|
@@ -1098,8 +1117,10 @@ void *blas_memory_alloc(int procpos){ |
|
|
|
#endif |
|
|
|
|
|
|
|
memory[position].used = 1; |
|
|
|
|
|
|
|
#if defined(SMP) && !defined(USE_OPENMP) |
|
|
|
UNLOCK_COMMAND(&alloc_lock); |
|
|
|
#endif |
|
|
|
|
|
|
|
/* blas_unlock(&memory[position].lock);*/ |
|
|
|
|
|
|
|
if (!memory[position].addr) { |
|
|
@@ -1146,9 +1167,13 @@ void *blas_memory_alloc(int procpos){ |
|
|
|
|
|
|
|
} while ((BLASLONG)map_address == -1); |
|
|
|
|
|
|
|
#if defined(SMP) && !defined(USE_OPENMP) |
|
|
|
LOCK_COMMAND(&alloc_lock); |
|
|
|
#endif |
|
|
|
memory[position].addr = map_address; |
|
|
|
#if defined(SMP) && !defined(USE_OPENMP) |
|
|
|
UNLOCK_COMMAND(&alloc_lock); |
|
|
|
#endif |
|
|
|
|
|
|
|
#ifdef DEBUG |
|
|
|
printf(" Mapping Succeeded. %p(%d)\n", (void *)memory[position].addr, position); |
|
|
@@ -1165,7 +1190,9 @@ void *blas_memory_alloc(int procpos){ |
|
|
|
|
|
|
|
if (memory_initialized == 1) { |
|
|
|
|
|
|
|
#if defined(SMP) && !defined(USE_OPENMP) |
|
|
|
LOCK_COMMAND(&alloc_lock); |
|
|
|
#endif |
|
|
|
|
|
|
|
if (memory_initialized == 1) { |
|
|
|
|
|
|
@@ -1174,8 +1201,9 @@ void *blas_memory_alloc(int procpos){ |
|
|
|
memory_initialized = 2; |
|
|
|
} |
|
|
|
|
|
|
|
#if defined(SMP) && !defined(USE_OPENMP) |
|
|
|
UNLOCK_COMMAND(&alloc_lock); |
|
|
|
|
|
|
|
#endif |
|
|
|
} |
|
|
|
#endif |
|
|
|
|
|
|
@@ -1202,8 +1230,9 @@ void blas_memory_free(void *free_area){ |
|
|
|
#endif |
|
|
|
|
|
|
|
position = 0; |
|
|
|
#if defined(SMP) && !defined(USE_OPENMP) |
|
|
|
LOCK_COMMAND(&alloc_lock); |
|
|
|
|
|
|
|
#endif |
|
|
|
while ((position < NUM_BUFFERS) && (memory[position].addr != free_area)) |
|
|
|
position++; |
|
|
|
|
|
|
@@ -1217,7 +1246,9 @@ void blas_memory_free(void *free_area){ |
|
|
|
WMB; |
|
|
|
|
|
|
|
memory[position].used = 0; |
|
|
|
#if defined(SMP) && !defined(USE_OPENMP) |
|
|
|
UNLOCK_COMMAND(&alloc_lock); |
|
|
|
#endif |
|
|
|
|
|
|
|
#ifdef DEBUG |
|
|
|
printf("Unmap Succeeded.\n\n"); |
|
|
@@ -1232,8 +1263,9 @@ void blas_memory_free(void *free_area){ |
|
|
|
for (position = 0; position < NUM_BUFFERS; position++) |
|
|
|
printf("%4ld %p : %d\n", position, memory[position].addr, memory[position].used); |
|
|
|
#endif |
|
|
|
#if defined(SMP) && !defined(USE_OPENMP) |
|
|
|
UNLOCK_COMMAND(&alloc_lock); |
|
|
|
|
|
|
|
#endif |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|