21 #ifndef RAJA_MemUtils_CPU_HPP
22 #define RAJA_MemUtils_CPU_HPP
24 #include "RAJA/config.hpp"
32 #if defined(_WIN32) || defined(WIN32) || defined(__CYGWIN__) || \
33 defined(__MINGW32__) || defined(__BORLANDC__)
34 #define RAJA_PLATFORM_WINDOWS
46 #if defined(RAJA_HAVE_POSIX_MEMALIGN)
49 int err = posix_memalign(&ret, alignment, size);
50 return err ? nullptr : ret;
51 #elif defined(RAJA_HAVE_ALIGNED_ALLOC)
52 return std::aligned_alloc(alignment, size);
53 #elif defined(RAJA_HAVE_MM_MALLOC)
54 return _mm_malloc(size, alignment);
55 #elif defined(RAJA_PLATFORM_WINDOWS)
56 return _aligned_malloc(size, alignment);
58 char* mem = (
char*)malloc(size + alignment +
sizeof(
void*));
59 if (
nullptr == mem)
return nullptr;
60 void** ptr = (
void**)((std::uintptr_t)(mem + alignment +
sizeof(
void*)) &
82 #if defined(RAJA_HAVE_POSIX_MEMALIGN) || defined(RAJA_HAVE_ALIGNED_ALLOC)
84 #elif defined(RAJA_HAVE_MM_MALLOC)
86 #elif defined(RAJA_PLATFORM_WINDOWS)
91 free(((
void**)ptr)[-1]);
107 template<
typename T,
typename index_type>
114 for (index_type i =
size; i > 0; --i)
Definition: AlignedRangeIndexSetBuilders.cpp:35
void * allocate_aligned(size_t alignment, size_t size)
Definition: MemUtils_CPU.hpp:44
void free_aligned(void *ptr)
Definition: MemUtils_CPU.hpp:80
T * allocate_aligned_type(size_t alignment, size_t size)
Definition: MemUtils_CPU.hpp:72
Definition: MemUtils_CPU.hpp:109
index_type size
Definition: MemUtils_CPU.hpp:110
void operator()(T *ptr)
Definition: MemUtils_CPU.hpp:112
Definition: MemUtils_CPU.hpp:99
void operator()(void *ptr)
Definition: MemUtils_CPU.hpp:100
Header file for RAJA type definitions.