3#include <AMReX_Config.H>
11#ifdef AMREX_TINY_PROFILING
24#include <unordered_map>
33inline std::size_t
aligned_size (std::size_t align_requirement, std::size_t size)
noexcept
35 return ((size + (align_requirement-1)) / align_requirement) * align_requirement;
39inline bool is_aligned (
const void* p, std::size_t alignment)
noexcept
41 auto* q =
const_cast<void*
>(p);
42 auto space = alignment;
43 return std::align(alignment, alignment, q, space) == p;
143 [[nodiscard]] virtual
void*
alloc (std::
size_t sz) = 0;
155 [[nodiscard]] virtual std::pair<
void*,std::
size_t>
158 auto* p =
alloc(szmax);
159 return std::make_pair(p, szmax);
172 [[nodiscard]]
virtual void*
181 virtual void free (
void* pt) = 0;
204 [[nodiscard]]
virtual bool isManaged ()
const;
213 [[nodiscard]]
virtual bool isDevice ()
const;
222 [[nodiscard]]
virtual bool isPinned ()
const;
254 static std::size_t
align (std::size_t sz);
273 static void PrintUsage (
bool print_max_usage=
false);
300 static void PrintUsageToFiles (std::string
const& filename, std::string
const& message);
312 static const std::size_t
align_size =
sizeof(Word);
335 std::string
const& error_msg);
#define BL_ASSERT(EX)
Definition AMReX_BLassert.H:39
A virtual base class for objects that manage their own dynamic memory allocation.
Definition AMReX_Arena.H:127
static void Finalize()
Used internally by amrex.
Definition AMReX_Arena.cpp:745
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 std::size_t align(std::size_t sz)
Given a minimum required arena size of sz bytes, this returns the next largest arena size that will a...
Definition AMReX_Arena.cpp:167
virtual bool isPinned() const
Check whether it is pinned host memory.
Definition AMReX_Arena.cpp:112
virtual void ResetMaxUsageCounter()
Definition AMReX_Arena.H:325
virtual bool isHostAccessible() const
Definition AMReX_Arena.cpp:76
virtual bool isStreamOrderedArena() const
Is this GPU stream ordered memory allocator?
Definition AMReX_Arena.H:246
static const std::size_t align_size
The alignment of allocated memory.
Definition AMReX_Arena.H:316
const ArenaInfo & arenaInfo() const
Return the ArenaInfo object for querying.
Definition AMReX_Arena.H:321
virtual bool isManaged() const
Check whether it is managed GPU memory.
Definition AMReX_Arena.cpp:88
void deregisterFromProfiling()
Remove this Arena from the list of Arenas that are profiled by TinyProfiler. This is equivalent to de...
Definition AMReX_Arena.cpp:154
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:156
static void out_of_memory_abort(std::string const &memory_type, std::size_t nbytes, std::string const &error_msg)
Definition AMReX_Arena.cpp:717
virtual std::size_t freeUnused_protected()
Definition AMReX_Arena.H:331
virtual void streamOrderedFree(void *pt, gpuStream_t stream)
Definition AMReX_Arena.cpp:130
void registerForProfiling(const std::string &memory_name)
Add this Arena to the list of Arenas that are profiled by TinyProfiler.
Definition AMReX_Arena.cpp:144
static void PrintUsageToFiles(std::string const &filename, std::string const &message)
Print memory usage information of all arenas to given file.
Definition AMReX_Arena.cpp:701
virtual bool isDevice() const
Check whether it is non-managed GPU device memory.
Definition AMReX_Arena.cpp:100
virtual bool hasFreeDeviceMemory(std::size_t sz)
Does the device have enough free memory for allocating this much memory? For CPU builds,...
Definition AMReX_Arena.cpp:123
void deallocate_system(void *p, std::size_t nbytes)
Definition AMReX_Arena.cpp:350
virtual void * shrink_in_place(void *, std::size_t sz)
Shrink allocation size in-place.
Definition AMReX_Arena.H:173
struct amrex::Arena::ArenaProfiler m_profiler
static void Initialize(bool minimal)
Used internally by amrex.
Definition AMReX_Arena.cpp:400
static void PrintUsage(bool print_max_usage=false)
Print memory usage information of all arenas.
Definition AMReX_Arena.cpp:594
virtual std::size_t freeUnused()
Free unused memory back to the system. Return value is the amount memory freed.
Definition AMReX_Arena.H:187
ArenaInfo arena_info
Definition AMReX_Arena.H:329
static void PrintUsageToStream(std::ostream &os, std::string const &space)
Print memory usage information of all arenas to a given output stream.
Definition AMReX_Arena.cpp:657
virtual bool isDeviceAccessible() const
Definition AMReX_Arena.cpp:66
void * allocate_system(std::size_t nbytes)
Definition AMReX_Arena.cpp:173
amrex_long Long
Definition AMReX_INT.H:30
Arena * The_Managed_Arena()
Definition AMReX_Arena.cpp:835
Arena * The_Comms_Arena()
Definition AMReX_Arena.cpp:865
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_Cpu_Arena()
Definition AMReX_Arena.cpp:855
Arena * The_Arena()
Definition AMReX_Arena.cpp:805
Definition AMReX_Amr.cpp:49
cudaStream_t gpuStream_t
Definition AMReX_GpuControl.H:83
bool is_aligned(const void *p, std::size_t alignment) noexcept
Return whether the address p is aligned to alignment bytes.
Definition AMReX_Arena.H:39
std::size_t aligned_size(std::size_t align_requirement, std::size_t size) noexcept
Given a minimum required size in bytes, this returns the smallest size greater or equal to size that ...
Definition AMReX_Arena.H:33
Definition AMReX_Arena.H:74
ArenaInfo & SetReadOnly() noexcept
Definition AMReX_Arena.H:91
bool device_set_preferred
Definition AMReX_Arena.H:79
bool device_set_readonly
Definition AMReX_Arena.H:78
bool device_use_hostalloc
Definition AMReX_Arena.H:80
ArenaInfo & SetReleaseThreshold(Long rt) noexcept
Definition AMReX_Arena.H:82
ArenaInfo & SetDefragmentation(bool b) noexcept
Definition AMReX_Arena.H:114
Long release_threshold
Definition AMReX_Arena.H:75
ArenaInfo & SetPreferred() noexcept
Definition AMReX_Arena.H:96
ArenaInfo & SetCpuMemory() noexcept
Definition AMReX_Arena.H:106
bool device_use_managed_memory
Definition AMReX_Arena.H:77
bool use_cpu_memory
Definition AMReX_Arena.H:76
ArenaInfo & SetDeviceMemory() noexcept
Definition AMReX_Arena.H:86
bool defragmentation
Definition AMReX_Arena.H:81
ArenaInfo & SetHostAlloc() noexcept
Definition AMReX_Arena.H:101
Definition AMReX_Arena.H:337
std::map< std::string, MemStat > m_profiling_stats
Data structure used for profiling with TinyProfiler.
Definition AMReX_Arena.H:343
void profile_alloc(void *ptr, std::size_t nbytes)
Definition AMReX_Arena.cpp:889
void profile_free(void *ptr)
Definition AMReX_Arena.cpp:902
std::unordered_map< void *, std::pair< MemStat *, std::size_t > > m_currently_allocated
Track the currently allocated memory, not used by CArena.
Definition AMReX_Arena.H:345
bool m_do_profiling
If this arena is profiled by TinyProfiler.
Definition AMReX_Arena.H:339
std::mutex m_arena_profiler_mutex
Mutex for the profiling.
Definition AMReX_Arena.H:341
ArenaProfiler() noexcept=default
Definition AMReX_Arena.H:15