1 /* 2 This file is part of the BOLT-LMM linear mixed model software package 3 developed by Po-Ru Loh. Copyright (C) 2014-2019 Harvard University. 4 5 This program is free software: you can redistribute it and/or modify 6 it under the terms of the GNU General Public License as published by 7 the Free Software Foundation, either version 3 of the License, or 8 (at your option) any later version. 9 10 This program is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 GNU General Public License for more details. 14 15 You should have received a copy of the GNU General Public License 16 along with this program. If not, see <http://www.gnu.org/licenses/>. 17 */ 18 19 #include <cstdlib> 20 #include <iostream> 21 22 #include "MemoryUtils.hpp" 23 #include "Types.hpp" 24 ALIGNED_MALLOC(uint64 size)25void *ALIGNED_MALLOC(uint64 size) { 26 #ifdef USE_MKL_MALLOC 27 void *p = mkl_malloc(size, MEM_ALIGNMENT); 28 #else 29 void *p = _mm_malloc(size, MEM_ALIGNMENT); 30 #endif 31 // TODO: change to assert() or dispense with altogether and change ALIGNED_MALLOC to macro? 32 if (p == NULL) { 33 std::cerr << "ERROR: Failed to allocate " << size << " bytes" << std::endl; 34 exit(1); 35 } else if ((uint64) p & 0xf) { 36 std::cerr << "ERROR: Memory alignment of " << size << " bytes failed" << std::endl; 37 exit(1); 38 } 39 return p; 40 } 41