diff --git a/driver/others/memory.c b/driver/others/memory.c index c55688ace..94b2f1a6a 100644 --- a/driver/others/memory.c +++ b/driver/others/memory.c @@ -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 ++; }