Limit the additional locking from PRs 1052,1299 to non-OpenMP multithreading
This commit is contained in:
parent
e3a80e6aa8
commit
7646974227
|
@ -455,11 +455,15 @@ static void *alloc_mmap(void *address){
|
||||||
}
|
}
|
||||||
|
|
||||||
if (map_address != (void *)-1) {
|
if (map_address != (void *)-1) {
|
||||||
|
#if defined(SMP) && !defined(USE_OPENMP)
|
||||||
LOCK_COMMAND(&alloc_lock);
|
LOCK_COMMAND(&alloc_lock);
|
||||||
|
#endif
|
||||||
release_info[release_pos].address = map_address;
|
release_info[release_pos].address = map_address;
|
||||||
release_info[release_pos].func = alloc_mmap_free;
|
release_info[release_pos].func = alloc_mmap_free;
|
||||||
release_pos ++;
|
release_pos ++;
|
||||||
|
#if defined(SMP) && !defined(USE_OPENMP)
|
||||||
UNLOCK_COMMAND(&alloc_lock);
|
UNLOCK_COMMAND(&alloc_lock);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef OS_LINUX
|
#ifdef OS_LINUX
|
||||||
|
@ -601,14 +605,18 @@ static void *alloc_mmap(void *address){
|
||||||
#if defined(OS_LINUX) && !defined(NO_WARMUP)
|
#if defined(OS_LINUX) && !defined(NO_WARMUP)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
LOCK_COMMAND(&alloc_lock);
|
|
||||||
|
|
||||||
if (map_address != (void *)-1) {
|
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].address = map_address;
|
||||||
release_info[release_pos].func = alloc_mmap_free;
|
release_info[release_pos].func = alloc_mmap_free;
|
||||||
release_pos ++;
|
release_pos ++;
|
||||||
|
#if defined(SMP) && !defined(USE_OPENMP)
|
||||||
|
UNLOCK_COMMAND(&alloc_lock);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
UNLOCK_COMMAND(&alloc_lock);
|
|
||||||
|
|
||||||
return map_address;
|
return map_address;
|
||||||
}
|
}
|
||||||
|
@ -1007,6 +1015,11 @@ void *blas_memory_alloc(int procpos){
|
||||||
NULL,
|
NULL,
|
||||||
};
|
};
|
||||||
void *(**func)(void *address);
|
void *(**func)(void *address);
|
||||||
|
|
||||||
|
#if defined(USE_OPENMP)
|
||||||
|
if (!memory_initialized) {
|
||||||
|
#endif
|
||||||
|
|
||||||
LOCK_COMMAND(&alloc_lock);
|
LOCK_COMMAND(&alloc_lock);
|
||||||
|
|
||||||
if (!memory_initialized) {
|
if (!memory_initialized) {
|
||||||
|
@ -1042,6 +1055,9 @@ void *blas_memory_alloc(int procpos){
|
||||||
|
|
||||||
}
|
}
|
||||||
UNLOCK_COMMAND(&alloc_lock);
|
UNLOCK_COMMAND(&alloc_lock);
|
||||||
|
#if defined(USE_OPENMP)
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
printf("Alloc Start ...\n");
|
printf("Alloc Start ...\n");
|
||||||
|
@ -1056,13 +1072,17 @@ void *blas_memory_alloc(int procpos){
|
||||||
|
|
||||||
do {
|
do {
|
||||||
if (!memory[position].used && (memory[position].pos == mypos)) {
|
if (!memory[position].used && (memory[position].pos == mypos)) {
|
||||||
|
#if defined(SMP) && !defined(USE_OPENMP)
|
||||||
LOCK_COMMAND(&alloc_lock);
|
LOCK_COMMAND(&alloc_lock);
|
||||||
/* blas_lock(&memory[position].lock);*/
|
#else
|
||||||
|
blas_lock(&memory[position].lock);
|
||||||
|
#endif
|
||||||
if (!memory[position].used) goto allocation;
|
if (!memory[position].used) goto allocation;
|
||||||
|
#if defined(SMP) && !defined(USE_OPENMP)
|
||||||
UNLOCK_COMMAND(&alloc_lock);
|
UNLOCK_COMMAND(&alloc_lock);
|
||||||
/* blas_unlock(&memory[position].lock);*/
|
#else
|
||||||
|
blas_unlock(&memory[position].lock);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
position ++;
|
position ++;
|
||||||
|
@ -1075,15 +1095,19 @@ void *blas_memory_alloc(int procpos){
|
||||||
position = 0;
|
position = 0;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
/* if (!memory[position].used) { */
|
#if defined(SMP) && !defined(USE_OPENMP)
|
||||||
LOCK_COMMAND(&alloc_lock);
|
LOCK_COMMAND(&alloc_lock);
|
||||||
/* blas_lock(&memory[position].lock);*/
|
#else
|
||||||
|
if (!memory[position].used) {
|
||||||
|
blas_lock(&memory[position].lock);
|
||||||
|
#endif
|
||||||
if (!memory[position].used) goto allocation;
|
if (!memory[position].used) goto allocation;
|
||||||
|
#if defined(SMP) && !defined(USE_OPENMP)
|
||||||
UNLOCK_COMMAND(&alloc_lock);
|
UNLOCK_COMMAND(&alloc_lock);
|
||||||
/* blas_unlock(&memory[position].lock);*/
|
#else
|
||||||
/* } */
|
blas_unlock(&memory[position].lock);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
position ++;
|
position ++;
|
||||||
|
|
||||||
|
@ -1098,9 +1122,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);
|
||||||
/* blas_unlock(&memory[position].lock);*/
|
#else
|
||||||
|
blas_unlock(&memory[position].lock);
|
||||||
|
#endif
|
||||||
|
|
||||||
if (!memory[position].addr) {
|
if (!memory[position].addr) {
|
||||||
do {
|
do {
|
||||||
|
@ -1146,9 +1172,13 @@ void *blas_memory_alloc(int procpos){
|
||||||
|
|
||||||
} while ((BLASLONG)map_address == -1);
|
} while ((BLASLONG)map_address == -1);
|
||||||
|
|
||||||
|
#if defined(SMP) && !defined(USE_OPENMP)
|
||||||
LOCK_COMMAND(&alloc_lock);
|
LOCK_COMMAND(&alloc_lock);
|
||||||
|
#endif
|
||||||
memory[position].addr = map_address;
|
memory[position].addr = map_address;
|
||||||
|
#if defined(SMP) && !defined(USE_OPENMP)
|
||||||
UNLOCK_COMMAND(&alloc_lock);
|
UNLOCK_COMMAND(&alloc_lock);
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
printf(" Mapping Succeeded. %p(%d)\n", (void *)memory[position].addr, position);
|
printf(" Mapping Succeeded. %p(%d)\n", (void *)memory[position].addr, position);
|
||||||
|
@ -1202,8 +1232,9 @@ void blas_memory_free(void *free_area){
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
position = 0;
|
position = 0;
|
||||||
|
#if defined(SMP) && !defined(USE_OPENMP)
|
||||||
LOCK_COMMAND(&alloc_lock);
|
LOCK_COMMAND(&alloc_lock);
|
||||||
|
#endif
|
||||||
while ((position < NUM_BUFFERS) && (memory[position].addr != free_area))
|
while ((position < NUM_BUFFERS) && (memory[position].addr != free_area))
|
||||||
position++;
|
position++;
|
||||||
|
|
||||||
|
@ -1217,7 +1248,9 @@ void blas_memory_free(void *free_area){
|
||||||
WMB;
|
WMB;
|
||||||
|
|
||||||
memory[position].used = 0;
|
memory[position].used = 0;
|
||||||
|
#if defined(SMP) && !defined(USE_OPENMP)
|
||||||
UNLOCK_COMMAND(&alloc_lock);
|
UNLOCK_COMMAND(&alloc_lock);
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
printf("Unmap Succeeded.\n\n");
|
printf("Unmap Succeeded.\n\n");
|
||||||
|
@ -1232,8 +1265,9 @@ void blas_memory_free(void *free_area){
|
||||||
for (position = 0; position < NUM_BUFFERS; position++)
|
for (position = 0; position < NUM_BUFFERS; position++)
|
||||||
printf("%4ld %p : %d\n", position, memory[position].addr, memory[position].used);
|
printf("%4ld %p : %d\n", position, memory[position].addr, memory[position].used);
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(SMP) && !defined(USE_OPENMP)
|
||||||
UNLOCK_COMMAND(&alloc_lock);
|
UNLOCK_COMMAND(&alloc_lock);
|
||||||
|
#endif
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue