1 // --------------------------------------------------------------------------
4 // Markus Wittmann, 2016-2017
5 // RRZE, University of Erlangen-Nuremberg, Germany
6 // markus.wittmann -at- fau.de or hpc -at- rrze.fau.de
9 // LSS, University of Erlangen-Nuremberg, Germany
11 // Michael Hussnaetter, 2017-2018
12 // University of Erlangen-Nuremberg, Germany
13 // michael.hussnaetter -at- fau.de
15 // This file is part of the Lattice Boltzmann Benchmark Kernels (LbmBenchKernels).
17 // LbmBenchKernels is free software: you can redistribute it and/or modify
18 // it under the terms of the GNU General Public License as published by
19 // the Free Software Foundation, either version 3 of the License, or
20 // (at your option) any later version.
22 // LbmBenchKernels is distributed in the hope that it will be useful,
23 // but WITHOUT ANY WARRANTY; without even the implied warranty of
24 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
25 // GNU General Public License for more details.
27 // You should have received a copy of the GNU General Public License
28 // along with LbmBenchKernels. If not, see <http://www.gnu.org/licenses/>.
30 // --------------------------------------------------------------------------
31 // TODO: make configurable
32 #define HAVE_HUGE_PAGES
35 #ifdef HAVE_HUGE_PAGES
41 #include <string.h> // strerror
46 #include <hbwmalloc.h>
49 #ifdef HAVE_HUGE_PAGES
50 #include <sys/mman.h> // madvise
57 int MemAlloc(void ** ptr, size_t bytesToAlloc)
61 tmpPtr = malloc(bytesToAlloc);
63 if (tmpPtr == NULL) { // && bytesToAlloc != 0) {
64 Error("allocation of %lu bytes failed: %d - %s\n", bytesToAlloc, errno, strerror(errno));
73 int MemAllocAligned(void ** ptr, size_t bytesToAlloc, size_t alignmentBytes)
77 ret = posix_memalign(ptr, alignmentBytes, bytesToAlloc);
80 Error("allocation of %lu bytes aligned to %lu bytes failed: %d - %s\n", bytesToAlloc, alignmentBytes, errno, strerror(errno));
84 #ifdef HAVE_HUGE_PAGES
86 if (alignmentBytes % 4096 == 0) {
87 ret = madvise(*ptr, bytesToAlloc, MADV_HUGEPAGE);
91 Error("madvise(%p, %lu, MADV_HUGEPAGE) failed: %d - %s.\n", *ptr, bytesToAlloc, errno, strerror(errno));
101 int MemFree(void ** ptr)
103 Assert(*ptr != NULL);
112 int MemZero(void * ptr, size_t bytesToZero)
115 Assert(bytesToZero > 0);
117 memset(ptr, 0, bytesToZero);
123 int HbwAlloc(void ** ptr, size_t bytesToAlloc)
127 tmpPtr = hbw_malloc(bytesToAlloc);
129 if (tmpPtr == NULL) { // && bytesToAlloc != 0) {
130 Error("allocation of %lu bytes in HBM failed: %d - %s\n", bytesToAlloc, errno, strerror(errno));
139 int HbwAllocAligned(void ** ptr, size_t bytesToAlloc, size_t alignmentBytes)
143 ret = hbw_posix_memalign(ptr, alignmentBytes, bytesToAlloc);
146 Error("allocation of %lu bytes in HBM aligned to %lu bytes failed: %d - %s\n", bytesToAlloc, alignmentBytes, errno, strerror(errno));
154 int HbwFree(void ** ptr)
156 Assert(*ptr != NULL);
165 #endif // HAVE_MEMKIND