Skip to content

Commit b4b952e

Browse files
authored
Add auxiliary tracking space for thread buffer frees too
1 parent 7d1becc commit b4b952e

1 file changed

Lines changed: 66 additions & 2 deletions

File tree

driver/others/memory.c

Lines changed: 66 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2060,6 +2060,7 @@ struct release_t {
20602060
int hugetlb_allocated = 0;
20612061

20622062
static struct release_t release_info[NUM_BUFFERS];
2063+
static struct release_t *new_release_info;
20632064
static int release_pos = 0;
20642065

20652066
#if defined(OS_LINUX) && !defined(NO_WARMUP)
@@ -2110,8 +2111,13 @@ static void *alloc_mmap(void *address){
21102111
#if (defined(SMP) || defined(USE_LOCKING)) && !defined(USE_OPENMP)
21112112
LOCK_COMMAND(&alloc_lock);
21122113
#endif
2114+
if (release_pos < NUM_BUFFERS) {
21132115
release_info[release_pos].address = map_address;
21142116
release_info[release_pos].func = alloc_mmap_free;
2117+
} else {
2118+
new_release_info[release_pos-NUM_BUFFERS].address = map_address;
2119+
new_release_info[release_pos-NUM_BUFFERS].func = alloc_mmap_free;
2120+
}
21152121
release_pos ++;
21162122
#if (defined(SMP) || defined(USE_LOCKING)) && !defined(USE_OPENMP)
21172123
UNLOCK_COMMAND(&alloc_lock);
@@ -2274,8 +2280,13 @@ static void *alloc_mmap(void *address){
22742280
#if (defined(SMP) || defined(USE_LOCKING)) && !defined(USE_OPENMP)
22752281
LOCK_COMMAND(&alloc_lock);
22762282
#endif
2283+
if (release_pos < NUM_BUFFERS) {
22772284
release_info[release_pos].address = map_address;
22782285
release_info[release_pos].func = alloc_mmap_free;
2286+
{ else {
2287+
new_release_info[release_pos-NUM_BUFFERS].address = map_address;
2288+
new_release_info[release_pos-NUM_BUFFERS].func = alloc_mmap_free;
2289+
}
22792290
release_pos ++;
22802291
#if (defined(SMP) || defined(USE_LOCKING)) && !defined(USE_OPENMP)
22812292
UNLOCK_COMMAND(&alloc_lock);
@@ -2307,8 +2318,13 @@ static void *alloc_malloc(void *address){
23072318
if (map_address == (void *)NULL) map_address = (void *)-1;
23082319

23092320
if (map_address != (void *)-1) {
2321+
if (release_pos < NUM_BUFFERS) {
23102322
release_info[release_pos].address = map_address;
23112323
release_info[release_pos].func = alloc_malloc_free;
2324+
} else {
2325+
new_release_info[release_pos-NUM_BUFFERS].address = map_address;
2326+
new_release_info[release_pos-NUM_BUFFERS].func = alloc_malloc_free;
2327+
}
23122328
release_pos ++;
23132329
}
23142330

@@ -2341,8 +2357,13 @@ static void *alloc_qalloc(void *address){
23412357
if (map_address == (void *)NULL) map_address = (void *)-1;
23422358

23432359
if (map_address != (void *)-1) {
2360+
if (release_pos < NUM_BUFFERS) {
23442361
release_info[release_pos].address = map_address;
23452362
release_info[release_pos].func = alloc_qalloc_free;
2363+
} else {
2364+
new_release_info[release_pos-NUM_BUFFERS].address = map_address;
2365+
new_release_info[release_pos-NUM_BUFFERS].func = alloc_qalloc_free;
2366+
}
23462367
release_pos ++;
23472368
}
23482369

@@ -2370,8 +2391,13 @@ static void *alloc_windows(void *address){
23702391
if (map_address == (void *)NULL) map_address = (void *)-1;
23712392

23722393
if (map_address != (void *)-1) {
2394+
if (release_pos < NUM_BUFFERS) {
23732395
release_info[release_pos].address = map_address;
23742396
release_info[release_pos].func = alloc_windows_free;
2397+
} else {
2398+
new_release_info[release_pos-NUM_BUFFERS].address = map_address;
2399+
new_release_info[release_pos-NUM_BUFFERS].func = alloc_windows_free;
2400+
}
23752401
release_pos ++;
23762402
}
23772403

@@ -2414,9 +2440,15 @@ static void *alloc_devicedirver(void *address){
24142440
fd, 0);
24152441

24162442
if (map_address != (void *)-1) {
2443+
if (release_pos < NUM_BUFFERS) {
24172444
release_info[release_pos].address = map_address;
24182445
release_info[release_pos].attr = fd;
24192446
release_info[release_pos].func = alloc_devicedirver_free;
2447+
} else {
2448+
new_release_info[release_pos-NUM_BUFFERS].address = map_address;
2449+
new_release_info[release_pos-NUM_BUFFERS].attr = fd;
2450+
new_release_info[release_pos-NUM_BUFFERS].func = alloc_devicedirver_free;
2451+
}
24202452
release_pos ++;
24212453
}
24222454

@@ -2450,9 +2482,15 @@ static void *alloc_shm(void *address){
24502482

24512483
shmctl(shmid, IPC_RMID, 0);
24522484

2485+
if (release_pos < NUM_BUFFERS) {
24532486
release_info[release_pos].address = map_address;
24542487
release_info[release_pos].attr = shmid;
24552488
release_info[release_pos].func = alloc_shm_free;
2489+
} else {
2490+
new_release_info[release_pos-NUM_BUFFERS].address = map_address;
2491+
new_release_info[release_pos-NUM_BUFFERS].attr = shmid;
2492+
new_release_info[release_pos-NUM_BUFFERS].func = alloc_shm_free;
2493+
}
24562494
release_pos ++;
24572495
}
24582496

@@ -2556,8 +2594,13 @@ static void *alloc_hugetlb(void *address){
25562594
#endif
25572595

25582596
if (map_address != (void *)-1){
2597+
if (release_pos < NUM_BUFFERS) {
25592598
release_info[release_pos].address = map_address;
25602599
release_info[release_pos].func = alloc_hugetlb_free;
2600+
} else {
2601+
new_release_info[release_pos-NUM_BUFFERS].address = map_address;
2602+
new_release_info[release_pos-NUM_BUFFERS].func = alloc_hugetlb_free;
2603+
}
25612604
release_pos ++;
25622605
}
25632606

@@ -2604,9 +2647,15 @@ static void *alloc_hugetlbfile(void *address){
26042647
fd, 0);
26052648

26062649
if (map_address != (void *)-1) {
2650+
if (release_pos < NUM_BUFFERS) {
26072651
release_info[release_pos].address = map_address;
26082652
release_info[release_pos].attr = fd;
26092653
release_info[release_pos].func = alloc_hugetlbfile_free;
2654+
} else {
2655+
new_release_info[release_pos-NUM_BUFFERS].address = map_address;
2656+
new_release_info[release_pos-NUM_BUFFERS].attr = fd;
2657+
new_release_info[release_pos-NUM_BUFFERS].func = alloc_hugetlbfile_free;
2658+
}
26102659
release_pos ++;
26112660
}
26122661

@@ -2663,6 +2712,8 @@ static int memory_overflowed = 0;
26632712

26642713
void *blas_memory_alloc(int procpos){
26652714

2715+
int i;
2716+
26662717
int position;
26672718
#if defined(WHEREAMI) && !defined(USE_OPENMP)
26682719
int mypos = 0;
@@ -2926,8 +2977,9 @@ void *blas_memory_alloc(int procpos){
29262977
if (memory_overflowed) goto terminate;
29272978
printf("num_buffers exceeded, adding auxiliary array\n");
29282979
memory_overflowed=1;
2929-
newmemory= (struct newmemstruct*) malloc(512*sizeof(struct newmemstruct));
2930-
for (int i=0;i<512;i++) {
2980+
new_release_info = (struct release_t*) malloc(512*sizeof(struct release_t));
2981+
newmemory = (struct newmemstruct*) malloc(512*sizeof(struct newmemstruct));
2982+
for (i = 0; i < 512; i++) {
29312983
newmemory[i].addr = (void *)0;
29322984
#if defined(WHEREAMI) && !defined(USE_OPENMP)
29332985
newmemory[i].pos = -1;
@@ -3101,7 +3153,10 @@ void blas_shutdown(void){
31013153
LOCK_COMMAND(&alloc_lock);
31023154

31033155
for (pos = 0; pos < release_pos; pos ++) {
3156+
if (pos < NUM_BUFFERS)
31043157
release_info[pos].func(&release_info[pos]);
3158+
else
3159+
new_release_info[pos-NUM_BUFFERS].func(&new_release_info[pos-NUM_BUFFERS]);
31053160
}
31063161

31073162
#ifdef SEEK_ADDRESS
@@ -3118,6 +3173,15 @@ void blas_shutdown(void){
31183173
#endif
31193174
memory[pos].lock = 0;
31203175
}
3176+
if (memory_overflowed)
3177+
for (pos = 0; pos < 512; pos ++){
3178+
newmemory[pos].addr = (void *)0;
3179+
newmemory[pos].used = 0;
3180+
#if defined(WHEREAMI) && !defined(USE_OPENMP)
3181+
newmemory[pos].pos = -1;
3182+
#endif
3183+
newmemory[pos].lock = 0;
3184+
}
31213185

31223186
UNLOCK_COMMAND(&alloc_lock);
31233187

0 commit comments

Comments
 (0)