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); }
163 template <
typename T>
166 template <
class T,
class Enable =
void>
171 <T,std::enable_if_t<std::is_base_of_v
172 <ArenaAllocatorBase<typename T::value_type,
173 typename T::arena_wrapper_type>,
177 template <
typename T>
180 template <
typename T>
184 template <
typename T>
187 template <
typename T>
190 template <
typename T>
193 template <
typename T>
205 template <
typename A1,
typename A2,
206 std::enable_if_t<IsArenaAllocator<A1>::value &&
210 return a1.arena() == a2.arena();
213 template <
typename A1,
typename A2,
214 std::enable_if_t<IsArenaAllocator<A1>::value &&
215 IsArenaAllocator<A2>::value,
int> = 0>
218 return a1.arena() != a2.arena();
Definition AMReX_GpuAllocators.H:115
A virtual base class for objects that manage their own dynamic memory allocation.
Definition AMReX_Arena.H:124
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
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:153
virtual void * shrink_in_place(void *, std::size_t sz)
Shrink allocation size in-place.
Definition AMReX_Arena.H:170
Definition AMReX_GpuAllocators.H:143
Definition AMReX_GpuAllocators.H:122
Definition AMReX_GpuAllocators.H:136
Definition AMReX_GpuAllocators.H:129
Definition AMReX_GpuAllocators.H:150
void setArena(Arena *a_ar) noexcept
Definition AMReX_GpuAllocators.H:157
constexpr PolymorphicArenaAllocator(Arena *a_arena)
Definition AMReX_GpuAllocators.H:153
constexpr PolymorphicArenaAllocator()=default
Arena * The_Managed_Arena()
Definition AMReX_Arena.cpp:813
Arena * The_Device_Arena()
Definition AMReX_Arena.cpp:803
Arena * The_Pinned_Arena()
Definition AMReX_Arena.cpp:823
Arena * The_Async_Arena()
Definition AMReX_Arena.cpp:793
Arena * The_Arena()
Definition AMReX_Arena.cpp:783
Definition AMReX_Amr.cpp:49
bool operator!=(A1 const &a1, A2 const &a2)
Definition AMReX_GpuAllocators.H:216
bool operator==(A1 const &a1, A2 const &a2)
Definition AMReX_GpuAllocators.H:208
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:167
Definition AMReX_GpuAllocators.H:178
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:108
Definition AMReX_GpuAllocators.H:164