A virtual base class for objects that manage their own dynamic memory allocation.
More...
|
| virtual | ~Arena ()=default |
| |
| | Arena () noexcept=default |
| |
| | Arena (const Arena &rhs)=delete |
| |
| | Arena (Arena &&rhs)=delete |
| |
| Arena & | operator= (const Arena &rhs)=delete |
| |
| Arena & | operator= (Arena &&rhs)=delete |
| |
| 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.
|
| |
| virtual void * | shrink_in_place (void *, std::size_t sz) |
| | Shrink allocation size in-place.
|
| |
| virtual void | free (void *pt)=0 |
| | A pure virtual function for deleting the arena pointed to by pt.
|
| |
| virtual std::size_t | freeUnused () |
| | Free unused memory back to the system. Return value is the amount memory freed.
|
| |
| virtual bool | isDeviceAccessible () const |
| |
| virtual bool | isHostAccessible () const |
| |
| virtual bool | isManaged () const |
| | Check whether it is managed GPU memory.
|
| |
| virtual bool | isDevice () const |
| | Check whether it is non-managed GPU device memory.
|
| |
| virtual bool | isPinned () const |
| | Check whether it is pinned host memory.
|
| |
| virtual bool | hasFreeDeviceMemory (std::size_t sz) |
| | Does the device have enough free memory for allocating this much memory? For CPU builds, this always return true. This is not a const function because it may attempt to release memory back to the system.
|
| |
| void | registerForProfiling (const std::string &memory_name) |
| | Add this Arena to the list of Arenas that are profiled by TinyProfiler.
|
| |
| void | deregisterFromProfiling () |
| | Remove this Arena from the list of Arenas that are profiled by TinyProfiler. This is equivalent to destructing and re-constructing the Arena.
|
| |
| virtual bool | isStreamOrderedArena () const |
| | Is this GPU stream ordered memory allocator?
|
| |
| const ArenaInfo & | arenaInfo () const |
| | Return the ArenaInfo object for querying.
|
| |
| virtual void | ResetMaxUsageCounter () |
| |
|
| 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 align to align_size bytes.
|
| |
| static void | Initialize (bool minimal) |
| | Used internally by amrex.
|
| |
| static void | PrintUsage (bool print_max_usage=false) |
| | Print memory usage information of all arenas.
|
| |
| static void | PrintUsageToStream (std::ostream &os, std::string const &space) |
| | Print memory usage information of all arenas to a given output stream.
|
| |
| static void | PrintUsageToFiles (std::string const &filename, std::string const &message) |
| | Print memory usage information of all arenas to given file.
|
| |
| static void | Finalize () |
| | Used internally by amrex.
|
| |
A virtual base class for objects that manage their own dynamic memory allocation.
| virtual std::pair< void *, std::size_t > amrex::Arena::alloc_in_place |
( |
void * |
, |
|
|
std::size_t |
, |
|
|
std::size_t |
szmax |
|
) |
| |
|
inlinevirtual |
Allocate memory in-place if possible.
In this implementation of the virtual function, a new allocation is always performed, and it returns the new pointer and allocation size.
Note that this function does NOT free the existing allocation. So it's the caller's responsibility to free the original pointer when appropriate.
Reimplemented in amrex::CArena.
| bool amrex::Arena::isDevice |
( |
| ) |
const |
|
virtual |
Check whether it is non-managed GPU device memory.
Note that isManaged, isDevice and isPinned are mutually exclusive. For memory allocated by cudaMalloc* etc. in GPU builds, one of them returns true. For CPU builds, they are always false.
Reimplemented in amrex::BArena, amrex::PArena, and amrex::SArena.
| bool amrex::Arena::isManaged |
( |
| ) |
const |
|
virtual |
Check whether it is managed GPU memory.
Note that isManaged, isDevice and isPinned are mutually exclusive. For memory allocated by cudaMalloc* etc. in GPU builds, one of them returns true. For CPU builds, they are always false.
Reimplemented in amrex::BArena, amrex::PArena, and amrex::SArena.
| bool amrex::Arena::isPinned |
( |
| ) |
const |
|
virtual |
Check whether it is pinned host memory.
Note that isManaged, isDevice and isPinned are mutually exclusive. For memory allocated by cudaMalloc* etc. in GPU builds, one of them returns true. For CPU builds, they are always false.
Reimplemented in amrex::BArena, amrex::PArena, and amrex::SArena.
| void amrex::Arena::PrintUsage |
( |
bool |
print_max_usage = false | ) |
|
|
static |
Print memory usage information of all arenas.
This function reports memory usage statistics for all CArena-based AMReX arenas. It contains MPI collective calls and therefore must be called by all processes. The output is printed on the I/O process only.
Depending on the value of print_max_usage, the function prints either the current memory usage (when false) or the maximum memory usage recoreded (when true).
- Parameters
-
| print_max_usage | whether to print the maximum usage or the current usage |
| virtual void * amrex::Arena::shrink_in_place |
( |
void * |
, |
|
|
std::size_t |
sz |
|
) |
| |
|
inlinevirtual |
Shrink allocation size in-place.
In this implementation of the virtual function, a new allocation is always performed, and it returns the new pointer.
Note that this function does NOT free the existing allocation. So it's the caller's responsibility to free the original pointer when appropriate.
Reimplemented in amrex::CArena.