| @@ -1165,11 +1165,10 @@ void *blas_memory_alloc(int procpos){ | |||
| #ifdef ALLOC_DEVICEDRIVER | |||
| alloc_devicedirver, | |||
| #endif | |||
| /* Hugetlb implicitly assumes ALLOC_SHM */ | |||
| #ifdef ALLOC_SHM | |||
| #ifdef ALLOC_SHM && !defined(ALLOC_HUGETLB) | |||
| alloc_shm, | |||
| #endif | |||
| #if ((defined ALLOC_SHM) && (defined OS_LINUX || defined OS_AIX || defined __sun__ || defined OS_WINDOWS)) | |||
| #if ((defined ALLOC_HUGETLB) && (defined OS_LINUX || defined OS_AIX || defined __sun__ || defined OS_WINDOWS)) | |||
| alloc_hugetlb, | |||
| #endif | |||
| #ifdef ALLOC_MMAP | |||
| @@ -1190,7 +1189,6 @@ void *blas_memory_alloc(int procpos){ | |||
| struct alloc_t * alloc_info; | |||
| struct alloc_t ** alloc_table; | |||
| #if defined(SMP) && !defined(USE_OPENMP) | |||
| int mi; | |||
| LOCK_COMMAND(&alloc_lock); | |||
| @@ -1282,7 +1280,7 @@ UNLOCK_COMMAND(&alloc_lock); | |||
| } | |||
| #endif | |||
| #if (defined ALLOC_SHM) && (defined OS_LINUX || defined OS_AIX || defined __sun__ || defined OS_WINDOWS) | |||
| #if (defined ALLOC_HUGETLB) && (defined OS_LINUX || defined OS_AIX || defined __sun__ || defined OS_WINDOWS) | |||
| if ((*func == alloc_hugetlb) && (map_address != (void *)-1)) hugetlb_allocated = 1; | |||
| #endif | |||
| @@ -2494,7 +2492,7 @@ static void *alloc_devicedirver(void *address){ | |||
| #endif | |||
| #ifdef ALLOC_SHM | |||
| #if defined(ALLOC_SHM) && !defined(ALLOC_HUGETLB) | |||
| static void alloc_shm_free(struct release_t *release){ | |||
| @@ -2506,7 +2504,9 @@ static void alloc_shm_free(struct release_t *release){ | |||
| static void *alloc_shm(void *address){ | |||
| void *map_address; | |||
| int shmid; | |||
| #ifdef DEBUG | |||
| fprintf(stderr,"alloc_shm got called\n"); | |||
| #endif | |||
| shmid = shmget(IPC_PRIVATE, BUFFER_SIZE,IPC_CREAT | 0600); | |||
| map_address = (void *)shmat(shmid, address, 0); | |||
| @@ -2533,6 +2533,7 @@ static void *alloc_shm(void *address){ | |||
| return map_address; | |||
| } | |||
| #endif | |||
| #if defined OS_LINUX || defined OS_AIX || defined __sun__ || defined OS_WINDOWS | |||
| @@ -2562,6 +2563,10 @@ static void *alloc_hugetlb(void *address){ | |||
| void *map_address = (void *)-1; | |||
| #ifdef DEBUG | |||
| fprintf(stderr,"alloc_hugetlb got called\n"); | |||
| #endif | |||
| #if defined(OS_LINUX) || defined(OS_AIX) | |||
| int shmid; | |||
| @@ -2583,7 +2588,7 @@ static void *alloc_hugetlb(void *address){ | |||
| if (map_address != (void *)-1){ | |||
| shmctl(shmid, IPC_RMID, 0); | |||
| } | |||
| }else printf("alloc_hugetlb failed\n"); | |||
| } | |||
| #endif | |||
| @@ -2645,7 +2650,6 @@ static void *alloc_hugetlb(void *address){ | |||
| } | |||
| #endif | |||
| #endif | |||
| #ifdef ALLOC_HUGETLBFILE | |||
| @@ -2762,11 +2766,10 @@ void *blas_memory_alloc(int procpos){ | |||
| #ifdef ALLOC_DEVICEDRIVER | |||
| alloc_devicedirver, | |||
| #endif | |||
| /* Hugetlb implicitly assumes ALLOC_SHM */ | |||
| #ifdef ALLOC_SHM | |||
| #ifdef ALLOC_SHM && !defined(ALLOC_HUGETLB) | |||
| alloc_shm, | |||
| #endif | |||
| #if ((defined ALLOC_SHM) && (defined OS_LINUX || defined OS_AIX || defined __sun__ || defined OS_WINDOWS)) | |||
| #if ((defined ALLOC_HUGETLB) && (defined OS_LINUX || defined OS_AIX || defined __sun__ || defined OS_WINDOWS)) | |||
| alloc_hugetlb, | |||
| #endif | |||
| #ifdef ALLOC_MMAP | |||
| @@ -2945,8 +2948,22 @@ void *blas_memory_alloc(int procpos){ | |||
| } | |||
| #endif | |||
| #if (defined ALLOC_SHM) && (defined OS_LINUX || defined OS_AIX || defined __sun__ || defined OS_WINDOWS) | |||
| #if (defined ALLOC_HUGETLB) && (defined OS_LINUX || defined OS_AIX || defined __sun__ || defined OS_WINDOWS) | |||
| if ((*func == alloc_hugetlb) && (map_address != (void *)-1)) hugetlb_allocated = 1; | |||
| #ifdef DEBUG | |||
| if (hugetlb_allocated) printf("allocating via shared memory with large page support (hugetlb)\n"); | |||
| #endif | |||
| #endif | |||
| #if (defined ALLOC_SHM) && (defined OS_LINUX || defined OS_AIX || defined __sun__ || defined OS_WINDOWS) | |||
| #ifdef DEBUG | |||
| printf("allocating via shared memory\n"); | |||
| #endif | |||
| if ((*func == alloc_shm) && (map_address == (void *)-1)) { | |||
| #ifndef OS_WINDOWS | |||
| fprintf(stderr, "OpenBLAS Warning ... shared memory allocation was failed.\n"); | |||
| #endif | |||
| } | |||
| #endif | |||
| func ++; | |||
| @@ -3061,10 +3078,23 @@ allocation2: | |||
| } | |||
| #endif | |||
| #if (defined ALLOC_SHM) && (defined OS_LINUX || defined OS_AIX || defined __sun__ || defined OS_WINDOWS) | |||
| #if (defined ALLOC_HUGETLB) && (defined OS_LINUX || defined OS_AIX || defined __sun__ || defined OS_WINDOWS) | |||
| #ifdef DEBUG | |||
| fprintf(stderr,"OpenBLAS: allocating via shared memory with large page support (hugetlb)\n"); | |||
| #endif | |||
| if ((*func == alloc_hugetlb) && (map_address != (void *)-1)) hugetlb_allocated = 1; | |||
| #endif | |||
| #if (defined ALLOC_SHM) && (defined OS_LINUX || defined OS_AIX || defined __sun__ || defined OS_WINDOWS) | |||
| #ifdef DEBUG | |||
| fprintf(stderr,"allocating via shared memory\n"); | |||
| #endif | |||
| if ((*func == alloc_shm) && (map_address == (void *)-1)) { | |||
| #ifndef OS_WINDOWS | |||
| fprintf(stderr, "OpenBLAS Warning ... shared memory allocation was failed.\n"); | |||
| #endif | |||
| } | |||
| #endif | |||
| func ++; | |||
| } | |||