1#ifndef AMREX_GPUALLOCATORS_H_
2#define AMREX_GPUALLOCATORS_H_
3#include <AMReX_Config.H>
11#include <driver_types.h>
12#include <cuda_runtime.h>
27 [[nodiscard]]
constexpr T*
ptr () const noexcept {
return m_ptr; }
28 [[nodiscard]]
constexpr std::size_t
size () const noexcept {
return m_size; }
31 template <
class T,
class AR>
49 return FatPtr<T>{(T*)pn.first, pn.second/
sizeof(T)};
60 if (ptr !=
nullptr) {
arena()->
free(ptr); }
169 template <
typename T>
172 template <
class T,
class Enable =
void>
177 <T,std::enable_if_t<std::is_base_of_v
178 <ArenaAllocatorBase<typename T::value_type,
179 typename T::arena_wrapper_type>,
183 template <
typename T>
186 template <
typename T>
190 template <
typename T>
193 template <
typename T>
196 template <
typename T>
199 template <
typename T>
211 template <
typename A1,
typename A2,
212 std::enable_if_t<IsArenaAllocator<A1>::value &&
216 return a1.arena() == a2.arena();
219 template <
typename A1,
typename A2,
220 std::enable_if_t<IsArenaAllocator<A1>::value &&
221 IsArenaAllocator<A2>::value,
int> = 0>
224 return a1.arena() != a2.arena();
Definition AMReX_GpuAllocators.H:121
A virtual base class for objects that manage their own dynamic memory allocation.
Definition AMReX_Arena.H:132
virtual void free(void *pt)=0
A pure virtual function for deleting the arena pointed to by pt.
virtual void * alloc(std::size_t sz)=0
static bool IsInitialized()
Definition AMReX_Arena.cpp:799
virtual std::pair< void *, std::size_t > alloc_in_place(void *, std::size_t, std::size_t szmax)
Allocate memory in-place if possible.
Definition AMReX_Arena.H:161
virtual void * shrink_in_place(void *, std::size_t sz)
Shrink allocation size in-place.
Definition AMReX_Arena.H:178
Definition AMReX_GpuAllocators.H:149
Definition AMReX_GpuAllocators.H:128
Definition AMReX_GpuAllocators.H:142
Definition AMReX_GpuAllocators.H:135
Definition AMReX_GpuAllocators.H:156
void setArena(Arena *a_ar) noexcept
Definition AMReX_GpuAllocators.H:163
constexpr PolymorphicArenaAllocator(Arena *a_arena)
Definition AMReX_GpuAllocators.H:159
constexpr PolymorphicArenaAllocator()=default
Arena * The_Managed_Arena()
Definition AMReX_Arena.cpp:835
Arena * The_Device_Arena()
Definition AMReX_Arena.cpp:825
Arena * The_Pinned_Arena()
Definition AMReX_Arena.cpp:845
Arena * The_Async_Arena()
Definition AMReX_Arena.cpp:815
Arena * The_Arena()
Definition AMReX_Arena.cpp:805
Definition AMReX_Amr.cpp:49
Arena * The_Null_Arena()
Definition AMReX_Arena.cpp:875
bool operator!=(A1 const &a1, A2 const &a2)
Definition AMReX_GpuAllocators.H:222
bool operator==(A1 const &a1, A2 const &a2)
Definition AMReX_GpuAllocators.H:214
Definition AMReX_GpuAllocators.H:33
T value_type
Definition AMReX_GpuAllocators.H:34
Arena * arena() const noexcept
Definition AMReX_GpuAllocators.H:63
constexpr ArenaAllocatorBase()=default
AR arena_wrapper_type
Definition AMReX_GpuAllocators.H:35
T * allocate(std::size_t n)
Definition AMReX_GpuAllocators.H:40
T * shrink_in_place(T *p, std::size_t n)
Definition AMReX_GpuAllocators.H:53
constexpr ArenaAllocatorBase(AR a_ar)
Definition AMReX_GpuAllocators.H:38
FatPtr< T > allocate_in_place(T *p, std::size_t nmin, std::size_t nmax)
Definition AMReX_GpuAllocators.H:46
void deallocate(T *ptr, std::size_t)
Definition AMReX_GpuAllocators.H:58
Definition AMReX_GpuAllocators.H:71
static Arena * arena() noexcept
Definition AMReX_GpuAllocators.H:72
Definition AMReX_GpuAllocators.H:95
static Arena * arena() noexcept
Definition AMReX_GpuAllocators.H:96
Definition AMReX_GpuAllocators.H:77
static Arena * arena() noexcept
Definition AMReX_GpuAllocators.H:78
Definition AMReX_GpuAllocators.H:24
constexpr T * ptr() const noexcept
Definition AMReX_GpuAllocators.H:27
std::size_t m_size
Definition AMReX_GpuAllocators.H:26
T * m_ptr
Definition AMReX_GpuAllocators.H:25
constexpr std::size_t size() const noexcept
Definition AMReX_GpuAllocators.H:28
Definition AMReX_GpuAllocators.H:173
Definition AMReX_GpuAllocators.H:184
Definition AMReX_GpuAllocators.H:89
static Arena * arena() noexcept
Definition AMReX_GpuAllocators.H:90
Definition AMReX_GpuAllocators.H:83
static Arena * arena() noexcept
Definition AMReX_GpuAllocators.H:84
Definition AMReX_GpuAllocators.H:101
constexpr PolymorphicArenaWrapper()=default
constexpr PolymorphicArenaWrapper(Arena *a_arena)
Definition AMReX_GpuAllocators.H:103
Arena * arena() const noexcept
Definition AMReX_GpuAllocators.H:105
Arena * m_arena
Definition AMReX_GpuAllocators.H:114
Definition AMReX_GpuAllocators.H:170