|
UMPIRE
Umpire: resource management and provision
|
#include </home/docs/checkouts/readthedocs.org/user_builds/umpire/checkouts/develop/src/umpire/strategy/ResourceAwarePool.hpp>

Classes | |
| struct | Chunk |
Public Types | |
| using | Pointer = void * |
Public Member Functions | |
| ResourceAwarePool (const std::string &name, int id, Allocator allocator, const std::size_t first_minimum_pool_allocation_size=s_default_first_block_size, const std::size_t next_minimum_pool_allocation_size=s_default_next_block_size, const std::size_t alignment=s_default_alignment, PoolCoalesceHeuristic< ResourceAwarePool > should_coalesce=percent_releasable_hwm(100)) noexcept | |
| Construct a new ResourceAwarePool. More... | |
| ~ResourceAwarePool () | |
| ResourceAwarePool (const ResourceAwarePool &)=delete | |
| void * | allocate (std::size_t bytes) override |
| If this method is called, it will log a warning message and call allocate with the default Host resource. (Need to call allocate with a Camp resource instead). More... | |
| void * | allocate_resource (std::size_t bytes, camp::resources::Resource r) override |
| Allocate memory with the ResourceAwarePool. More... | |
| void | deallocate_resource (void *ptr, camp::resources::Resource r, std::size_t size) override |
| Deallocate memory with the ResourceAwarePool. More... | |
| void | deallocate (void *ptr, std::size_t size) override |
| Deallocate function will call private getResource function to get the resource associated with the pointer and then call deallocate_resource above. More... | |
| void | release () override |
| Release function will first check to see if there are any finished pending chunks and then release both the finished pending chunks and the free chunks. It will only wait for a pending chunk to finish if we are destructing the pool. More... | |
| std::size_t | getActualSize () const noexcept override |
| Get the current amount of memory allocated by this allocator. More... | |
| std::size_t | getReleasableSize () const noexcept |
| std::size_t | getActualHighwaterMark () const noexcept |
| std::size_t | getAlignedSize () const noexcept |
| Returns the current size of the pool, rounded up to alignment. More... | |
| std::size_t | getAlignedHighwaterMark () const noexcept |
| Platform | getPlatform () noexcept override |
| Get the platform associated with this AllocationStrategy. More... | |
| MemoryResourceTraits | getTraits () const noexcept override |
| bool | tracksMemoryUse () const noexcept override |
| std::size_t | getBlocksInPool () const noexcept |
| Return the number of memory blocks – both leased to application and internal free memory – that the pool holds. More... | |
| std::size_t | getLargestAvailableBlock () noexcept |
| Get the largest allocatable number of bytes from pool before the pool will grow. More... | |
| std::size_t | getReleasableBlocks () const noexcept |
| std::size_t | getTotalBlocks () const noexcept |
| void | coalesce () noexcept |
| void | do_coalesce (std::size_t suggested_size) noexcept |
| void * | allocate_internal (std::size_t bytes) |
| void * | allocate_named_internal (const std::string &name, std::size_t bytes) |
| void | deallocate_internal (void *ptr, std::size_t size=0) |
| virtual std::size_t | getCurrentSize () const noexcept |
| Get current (total) size of the allocated memory. More... | |
| virtual std::size_t | getHighWatermark () const noexcept |
| Get the high watermark of the total allocated size. More... | |
| virtual std::size_t | getAllocationCount () const noexcept |
| Get the total number of active allocations by this allocator. More... | |
| const std::string & | getName () noexcept |
| Get the name of this AllocationStrategy. More... | |
| const std::string & | getStrategyName () const noexcept |
| int | getId () noexcept |
| Get the id of this AllocationStrategy. More... | |
| virtual AllocationStrategy * | getParent () const noexcept |
| Traces where the allocator came from. More... | |
| bool | isTracked () const noexcept |
Static Public Member Functions | |
| static PoolCoalesceHeuristic< ResourceAwarePool > | percent_releasable (int percentage) |
| Coalescing Heuristic functions for Percent-Releasable and Blocks-Releasable. Both have the option to reallocate to High Watermark instead of actual size of the pool (actual size is currently the default). More... | |
| static PoolCoalesceHeuristic< ResourceAwarePool > | percent_releasable_hwm (int percentage) |
| static PoolCoalesceHeuristic< ResourceAwarePool > | blocks_releasable (std::size_t nblocks) |
| static PoolCoalesceHeuristic< ResourceAwarePool > | blocks_releasable_hwm (std::size_t nblocks) |
Public Attributes | |
| std::size_t | m_current_size {0} |
| std::size_t | m_high_watermark {0} |
| std::size_t | m_allocation_count {0} |
Static Public Attributes | |
| static constexpr std::size_t | s_default_first_block_size {512 * 1024 * 1024} |
| static constexpr std::size_t | s_default_next_block_size {1 * 1024 * 1024} |
| static constexpr std::size_t | s_default_alignment {16} |
Protected Member Functions | |
| Resource | getResource (void *ptr) const |
| Get the camp resource associated with a ptr. This function is meant for internal use within the class and for testing. More... | |
| std::size_t | getNumPending () const noexcept |
| Get the number of Pending chunks in the pool. This function is meant for testing. More... | |
| void | setTracking (bool) noexcept |
Protected Attributes | |
| std::string | m_name |
| std::string | m_strategy_name |
| int | m_id |
| bool | m_tracked {true} |
| AllocationStrategy * | m_parent |
Friends | |
| camp::resources::Resource | umpire::get_resource (Allocator a, void *ptr) |
| std::size_t | umpire::get_num_pending (Allocator a) |
| using umpire::strategy::ResourceAwarePool::Pointer = void* |
|
noexcept |
Construct a new ResourceAwarePool.
| name | Name of this instance of the ResourceAwarePool |
| id | Unique identifier for this instance |
| allocator | Allocation resource that pool uses |
| first_minimum_pool_allocation_size | Size the pool initially allocates |
| next_minimum_pool_allocation_size | The minimum size of all future allocations |
| alignment | Number of bytes with which to align allocation sizes (power-of-2) |
| should_coalesce | Heuristic for when to perform coalesce operation |
| umpire::strategy::ResourceAwarePool::~ResourceAwarePool | ( | ) |
References umpire::util::message::Debug, release(), and UMPIRE_LOG.
|
delete |
|
static |
Coalescing Heuristic functions for Percent-Releasable and Blocks-Releasable. Both have the option to reallocate to High Watermark instead of actual size of the pool (actual size is currently the default).
References UMPIRE_ERROR, and UMPIRE_UNUSED_ARG.
|
static |
References UMPIRE_ERROR, and UMPIRE_UNUSED_ARG.
|
static |
|
static |
|
overridevirtual |
If this method is called, it will log a warning message and call allocate with the default Host resource. (Need to call allocate with a Camp resource instead).
Implements umpire::strategy::AllocationStrategy.
References allocate_resource(), umpire::resource::Host, UMPIRE_LOG, and umpire::util::message::Warning.
|
overridevirtual |
Allocate memory with the ResourceAwarePool.
| bytes | The size in bytes for the allocation |
| r | The Camp resource that will own the memory |
Reimplemented from umpire::strategy::AllocationStrategy.
References umpire::strategy::mixins::AlignedAllocation::aligned_allocate(), umpire::strategy::mixins::AlignedAllocation::aligned_round_up(), umpire::util::FixedMallocPool::allocate(), umpire::strategy::ResourceAwarePool::Chunk::chunk_size, umpire::util::message::Debug, umpire::util::message::Error, umpire_mod::get_backtrace(), umpire::util::message::Info, umpire::strategy::mixins::AlignedAllocation::m_allocator, release(), umpire::strategy::ResourceAwarePool::Chunk::resource, UMPIRE_LOG, and UMPIRE_UNPOISON_MEMORY_REGION.
Referenced by allocate().
|
overridevirtual |
Deallocate memory with the ResourceAwarePool.
| ptr | A pointer to the memory allocation |
| r | The Camp resource that owns the memory |
| bytes | The size in bytes for the allocation |
Reimplemented from umpire::strategy::AllocationStrategy.
References umpire::util::message::Debug, do_coalesce(), UMPIRE_ERROR, and UMPIRE_LOG.
Referenced by deallocate().
|
overridevirtual |
Deallocate function will call private getResource function to get the resource associated with the pointer and then call deallocate_resource above.
Implements umpire::strategy::AllocationStrategy.
References deallocate_resource(), getResource(), UMPIRE_LOG, and umpire::util::message::Warning.
|
overridevirtual |
Release function will first check to see if there are any finished pending chunks and then release both the finished pending chunks and the free chunks. It will only wait for a pending chunk to finish if we are destructing the pool.
Reimplemented from umpire::strategy::AllocationStrategy.
References umpire::strategy::mixins::AlignedAllocation::aligned_deallocate(), umpire::util::FixedMallocPool::deallocate(), umpire::util::message::Debug, umpire::util::message::Error, umpire_mod::get_backtrace(), umpire::util::message::Info, and UMPIRE_LOG.
Referenced by allocate_resource(), and ~ResourceAwarePool().
|
overridevirtualnoexcept |
Get the current amount of memory allocated by this allocator.
Note that this can be larger than getCurrentSize(), particularly if the AllocationStrategy implements some kind of pooling.
Reimplemented from umpire::strategy::AllocationStrategy.
|
noexcept |
|
noexcept |
|
noexcept |
Returns the current size of the pool, rounded up to alignment.
|
noexcept |
|
overridevirtualnoexcept |
Get the platform associated with this AllocationStrategy.
The Platform distinguishes the appropriate place to execute operations on memory allocated by this AllocationStrategy.
Implements umpire::strategy::AllocationStrategy.
References umpire::strategy::AllocationStrategy::getPlatform(), and umpire::strategy::mixins::AlignedAllocation::m_allocator.
|
overridevirtualnoexcept |
Reimplemented from umpire::strategy::AllocationStrategy.
References umpire::strategy::AllocationStrategy::getTraits(), and umpire::strategy::mixins::AlignedAllocation::m_allocator.
|
overridevirtualnoexcept |
Reimplemented from umpire::strategy::AllocationStrategy.
|
noexcept |
Return the number of memory blocks – both leased to application and internal free memory – that the pool holds.
|
noexcept |
Get the largest allocatable number of bytes from pool before the pool will grow.
return The largest number of bytes that may be allocated without causing pool growth
|
noexcept |
|
noexcept |
|
noexcept |
|
noexcept |
References umpire::util::message::Debug, umpire::resource::Host, and UMPIRE_LOG.
Referenced by coalesce(), and deallocate_resource().
|
protected |
Get the camp resource associated with a ptr. This function is meant for internal use within the class and for testing.
| ptr | The pointer to data allocated with a ResourceAwarePool |
References umpire::util::message::Debug, umpire::util::message::Error, UMPIRE_LOG, and umpire::util::message::Warning.
Referenced by deallocate().
|
protectednoexcept |
Get the number of Pending chunks in the pool. This function is meant for testing.
|
inherited |
References umpire::strategy::AllocationStrategy::m_allocation_count, umpire::strategy::AllocationStrategy::m_current_size, and umpire::strategy::AllocationStrategy::m_high_watermark.
Referenced by umpire::strategy::mixins::AlignedAllocation::aligned_allocate(), umpire::strategy::AlignedAllocator::allocate(), umpire::strategy::AllocationAdvisor::allocate(), umpire::strategy::AllocationPrefetcher::allocate(), umpire::strategy::MixedPool::allocate(), umpire::strategy::NamedAllocationStrategy::allocate(), umpire::strategy::NumaPolicy::allocate(), umpire::strategy::SizeLimiter::allocate(), umpire::strategy::SlotPool::allocate(), umpire::strategy::ThreadSafeAllocator::allocate(), and umpire::strategy::MonotonicAllocationStrategy::MonotonicAllocationStrategy().
|
inherited |
References umpire::strategy::AllocationStrategy::m_allocation_count, umpire::strategy::AllocationStrategy::m_current_size, and umpire::strategy::AllocationStrategy::m_high_watermark.
Referenced by umpire::strategy::NamingShim::allocate(), and umpire::strategy::NamedAllocationStrategy::allocate_named().
|
inherited |
References umpire::strategy::AllocationStrategy::m_allocation_count, and umpire::strategy::AllocationStrategy::m_current_size.
Referenced by umpire::strategy::mixins::AlignedAllocation::aligned_deallocate(), umpire::strategy::AlignedAllocator::deallocate(), umpire::strategy::AllocationAdvisor::deallocate(), umpire::strategy::AllocationPrefetcher::deallocate(), umpire::strategy::MixedPool::deallocate(), umpire::strategy::NamedAllocationStrategy::deallocate(), umpire::strategy::NamingShim::deallocate(), umpire::strategy::NumaPolicy::deallocate(), umpire::strategy::SizeLimiter::deallocate(), umpire::strategy::ThreadSafeAllocator::deallocate(), umpire::strategy::DeviceIpcAllocator::deallocate(), umpire::strategy::DeviceIpcAllocator::~DeviceIpcAllocator(), umpire::strategy::MonotonicAllocationStrategy::~MonotonicAllocationStrategy(), and umpire::strategy::SlotPool::~SlotPool().
|
virtualnoexceptinherited |
Get current (total) size of the allocated memory.
This is the total size of all allocation currently 'live' that have been made by this AllocationStrategy object.
Reimplemented in umpire::strategy::FixedPool, umpire::strategy::MonotonicAllocationStrategy, umpire::resource::SyclDeviceMemoryResource< _allocator >, umpire::resource::NullMemoryResource, umpire::resource::NoOpMemoryResource, and umpire::resource::FileMemoryResource.
References umpire::strategy::AllocationStrategy::m_current_size.
Referenced by umpire::strategy::AllocationStrategy::getActualSize(), and umpire::Allocator::getCurrentSize().
|
virtualnoexceptinherited |
Get the high watermark of the total allocated size.
This is equivalent to the highest observed value of getCurrentSize.
Reimplemented in umpire::strategy::FixedPool, umpire::strategy::MonotonicAllocationStrategy, umpire::resource::SyclDeviceMemoryResource< _allocator >, umpire::resource::NullMemoryResource, umpire::resource::NoOpMemoryResource, and umpire::resource::FileMemoryResource.
References umpire::strategy::AllocationStrategy::m_high_watermark.
Referenced by umpire::Allocator::getHighWatermark().
|
virtualnoexceptinherited |
Get the total number of active allocations by this allocator.
References umpire::strategy::AllocationStrategy::m_allocation_count.
Referenced by umpire::Allocator::getAllocationCount().
|
noexceptinherited |
Get the name of this AllocationStrategy.
References umpire::strategy::AllocationStrategy::m_name.
Referenced by umpire::strategy::DynamicPoolList::coalesce(), umpire::strategy::QuickPool::coalesce(), coalesce(), umpire::strategy::mixins::Inspector::deregisterAllocation(), umpire::ResourceManager::destroyAllocator(), DynamicSizePool< IA >::DynamicSizePool(), umpire::Allocator::getName(), and umpire::util::unwrap_allocation_strategy().
|
noexceptinherited |
References umpire::strategy::AllocationStrategy::m_strategy_name.
Referenced by umpire::Allocator::getStrategyName().
|
noexceptinherited |
Get the id of this AllocationStrategy.
References umpire::strategy::AllocationStrategy::m_id.
Referenced by umpire::ResourceManager::destroyAllocator(), and umpire::Allocator::getId().
|
virtualnoexceptinherited |
Traces where the allocator came from.
References umpire::strategy::AllocationStrategy::m_parent.
Referenced by umpire::ResourceManager::destroyAllocator(), umpire::Allocator::getParent(), and umpire::is_accessible().
|
noexceptinherited |
References umpire::strategy::AllocationStrategy::m_tracked.
Referenced by umpire::Allocator::isTracked().
|
protectednoexceptinherited |
|
friend |
|
friend |
|
staticconstexpr |
|
staticconstexpr |
|
staticconstexpr |
|
inherited |
Referenced by umpire::strategy::AllocationStrategy::allocate_internal(), umpire::strategy::AllocationStrategy::allocate_named_internal(), umpire::strategy::AllocationStrategy::deallocate_internal(), umpire::strategy::mixins::Inspector::deregisterAllocation(), umpire::strategy::AllocationStrategy::getCurrentSize(), and umpire::strategy::mixins::Inspector::registerAllocation().
|
inherited |
|
inherited |
Referenced by umpire::strategy::AllocationStrategy::allocate_internal(), umpire::strategy::AllocationStrategy::allocate_named_internal(), umpire::strategy::AllocationStrategy::deallocate_internal(), umpire::strategy::mixins::Inspector::deregisterAllocation(), umpire::strategy::AllocationStrategy::getAllocationCount(), and umpire::strategy::mixins::Inspector::registerAllocation().
|
protectedinherited |
|
protectedinherited |
Referenced by umpire::strategy::AllocationStrategy::getStrategyName().
|
protectedinherited |
Referenced by umpire::strategy::AllocationStrategy::getId().
|
protectedinherited |
Referenced by umpire::strategy::AllocationStrategy::isTracked().
|
protectedinherited |
Referenced by umpire::strategy::AllocationStrategy::getParent().