IPPL (Independent Parallel Particle Layer)
IPPL
Loading...
Searching...
No Matches
ippl::DefaultBufferHandler< MemorySpace > Class Template Reference

Concrete implementation of BufferHandler for managing memory buffers. More...

#include <BufferHandler.h>

Inheritance diagram for ippl::DefaultBufferHandler< MemorySpace >:
Collaboration diagram for ippl::DefaultBufferHandler< MemorySpace >:

Public Types

using archive_type = ippl::detail::Archive<MemorySpace>
using buffer_type = std::shared_ptr<archive_type>
using size_type = ippl::detail::size_type

Public Member Functions

 ~DefaultBufferHandler () override
buffer_type getBuffer (size_type size, double overallocation) override
 Acquires a buffer of at least the specified size.
void freeBuffer (buffer_type buffer) override
 Frees a specified buffer.
void freeAllBuffers () override
 Frees a specified buffer.
void deleteAllBuffers () override
 Frees a specified buffer.
size_type getUsedSize () const override
 Frees a specified buffer.
size_type getFreeSize () const override
 Frees a specified buffer.

Protected Attributes

buffer_set_type used_buffers
 Set of used buffers.
buffer_set_type free_buffers
 Set of free buffers.

Private Types

using buffer_comparator_type = bool (*)(const buffer_type&, const buffer_type&)
using buffer_set_type = std::set<buffer_type, buffer_comparator_type>

Private Member Functions

bool isBufferUsed (buffer_type buffer) const
void releaseUsedBuffer (buffer_type buffer)
buffer_type findFreeBuffer (size_type requiredSize)
buffer_set_type::iterator findSmallestSufficientBuffer (size_type requiredSize)
buffer_type getFreeBuffer (buffer_type buffer)
buffer_type reallocateLargestFreeBuffer (size_type requiredSize)
buffer_type allocateNewBuffer (size_type requiredSize)

Static Private Member Functions

static bool bufferSizeComparator (const buffer_type &lhs, const buffer_type &rhs)

Private Attributes

size_type usedSize_m
 Total size of all allocated buffers.
size_type freeSize_m
 Total size of all free buffers.

Detailed Description

template<typename MemorySpace>
class ippl::DefaultBufferHandler< MemorySpace >

Concrete implementation of BufferHandler for managing memory buffers.

This class implements the BufferHandler interface, providing concrete behavior for buffer allocation, freeing, and memory management. It maintains two sorted sets of free and in-use buffers to allow for efficient queries.

Template Parameters
MemorySpaceThe memory space type for the buffer (e.g., Kokkos::HostSpace).

Definition at line 95 of file BufferHandler.h.

Member Typedef Documentation

◆ archive_type

template<typename MemorySpace>
using ippl::BufferHandler< MemorySpace >::archive_type = ippl::detail::Archive<MemorySpace>
inherited

Definition at line 23 of file BufferHandler.h.

◆ buffer_comparator_type

template<typename MemorySpace>
using ippl::DefaultBufferHandler< MemorySpace >::buffer_comparator_type = bool (*)(const buffer_type&, const buffer_type&)
private

Definition at line 144 of file BufferHandler.h.

◆ buffer_set_type

template<typename MemorySpace>
using ippl::DefaultBufferHandler< MemorySpace >::buffer_set_type = std::set<buffer_type, buffer_comparator_type>
private

Definition at line 145 of file BufferHandler.h.

◆ buffer_type

template<typename MemorySpace>
using ippl::BufferHandler< MemorySpace >::buffer_type = std::shared_ptr<archive_type>
inherited

Definition at line 24 of file BufferHandler.h.

◆ size_type

template<typename MemorySpace>
using ippl::BufferHandler< MemorySpace >::size_type = ippl::detail::size_type
inherited

Definition at line 25 of file BufferHandler.h.

Constructor & Destructor Documentation

◆ ~DefaultBufferHandler()

template<typename MemorySpace>
ippl::DefaultBufferHandler< MemorySpace >::~DefaultBufferHandler ( )
override

Definition at line 7 of file BufferHandler.hpp.

Member Function Documentation

◆ allocateNewBuffer()

template<typename MemorySpace>
DefaultBufferHandler< MemorySpace >::buffer_type ippl::DefaultBufferHandler< MemorySpace >::allocateNewBuffer ( size_type requiredSize)
private

Definition at line 138 of file BufferHandler.hpp.

References used_buffers, and usedSize_m.

Referenced by getBuffer().

Here is the caller graph for this function:

◆ bufferSizeComparator()

template<typename MemorySpace>
bool ippl::DefaultBufferHandler< MemorySpace >::bufferSizeComparator ( const buffer_type & lhs,
const buffer_type & rhs )
staticprivate

Definition at line 64 of file BufferHandler.hpp.

◆ deleteAllBuffers()

template<typename MemorySpace>
void ippl::DefaultBufferHandler< MemorySpace >::deleteAllBuffers ( )
overridevirtual

Frees a specified buffer.

Moves the specified buffer to a free state, making it available for reuse in future buffer requests.

Parameters
bufferThe buffer to be freed.

Implements ippl::BufferHandler< MemorySpace >.

Definition at line 43 of file BufferHandler.hpp.

References free_buffers, freeSize_m, used_buffers, and usedSize_m.

◆ findFreeBuffer()

template<typename MemorySpace>
DefaultBufferHandler< MemorySpace >::buffer_type ippl::DefaultBufferHandler< MemorySpace >::findFreeBuffer ( size_type requiredSize)
private

Definition at line 92 of file BufferHandler.hpp.

References findSmallestSufficientBuffer(), and free_buffers.

Referenced by getBuffer().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ findSmallestSufficientBuffer()

template<typename MemorySpace>
DefaultBufferHandler< MemorySpace >::buffer_set_type::iterator ippl::DefaultBufferHandler< MemorySpace >::findSmallestSufficientBuffer ( size_type requiredSize)
private

Definition at line 102 of file BufferHandler.hpp.

References free_buffers.

Referenced by findFreeBuffer().

Here is the caller graph for this function:

◆ freeAllBuffers()

template<typename MemorySpace>
void ippl::DefaultBufferHandler< MemorySpace >::freeAllBuffers ( )
overridevirtual

Frees a specified buffer.

Moves the specified buffer to a free state, making it available for reuse in future buffer requests.

Parameters
bufferThe buffer to be freed.

Implements ippl::BufferHandler< MemorySpace >.

Definition at line 34 of file BufferHandler.hpp.

References free_buffers, freeSize_m, used_buffers, and usedSize_m.

◆ freeBuffer()

template<typename MemorySpace>
void ippl::DefaultBufferHandler< MemorySpace >::freeBuffer ( buffer_type buffer)
overridevirtual

Frees a specified buffer.

Moves the specified buffer to a free state, making it available for reuse in future buffer requests.

Parameters
bufferThe buffer to be freed.

Implements ippl::BufferHandler< MemorySpace >.

Definition at line 27 of file BufferHandler.hpp.

References isBufferUsed(), and releaseUsedBuffer().

Referenced by getBuffer().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ getBuffer()

template<typename MemorySpace>
DefaultBufferHandler< MemorySpace >::buffer_type ippl::DefaultBufferHandler< MemorySpace >::getBuffer ( size_type size,
double overallocation )
overridevirtual

Acquires a buffer of at least the specified size.

Requests a memory buffer of the specified size, with the option to request a buffer larger than the base size by an overallocation multiplier. If a sufficiently large buffer is available, it is returned. If not, the largest free buffer is reallocated. If there are no free buffers available, only then a new buffer is allocated.

Parameters
sizeThe required buffer size.
overallocationA multiplier to allocate additional buffer space.
Returns
A shared pointer to the allocated buffer.

Implements ippl::BufferHandler< MemorySpace >.

Definition at line 11 of file BufferHandler.hpp.

References allocateNewBuffer(), findFreeBuffer(), free_buffers, freeBuffer(), getFreeBuffer(), and reallocateLargestFreeBuffer().

Here is the call graph for this function:

◆ getFreeBuffer()

template<typename MemorySpace>
DefaultBufferHandler< MemorySpace >::buffer_type ippl::DefaultBufferHandler< MemorySpace >::getFreeBuffer ( buffer_type buffer)
private

Definition at line 111 of file BufferHandler.hpp.

References free_buffers, freeSize_m, used_buffers, and usedSize_m.

Referenced by getBuffer().

Here is the caller graph for this function:

◆ getFreeSize()

template<typename MemorySpace>
DefaultBufferHandler< MemorySpace >::size_type ippl::DefaultBufferHandler< MemorySpace >::getFreeSize ( ) const
overridevirtual

Frees a specified buffer.

Moves the specified buffer to a free state, making it available for reuse in future buffer requests.

Parameters
bufferThe buffer to be freed.

Implements ippl::BufferHandler< MemorySpace >.

Definition at line 59 of file BufferHandler.hpp.

References freeSize_m.

◆ getUsedSize()

template<typename MemorySpace>
DefaultBufferHandler< MemorySpace >::size_type ippl::DefaultBufferHandler< MemorySpace >::getUsedSize ( ) const
overridevirtual

Frees a specified buffer.

Moves the specified buffer to a free state, making it available for reuse in future buffer requests.

Parameters
bufferThe buffer to be freed.

Implements ippl::BufferHandler< MemorySpace >.

Definition at line 53 of file BufferHandler.hpp.

References usedSize_m.

◆ isBufferUsed()

template<typename MemorySpace>
bool ippl::DefaultBufferHandler< MemorySpace >::isBufferUsed ( buffer_type buffer) const
private

Definition at line 75 of file BufferHandler.hpp.

References used_buffers.

Referenced by freeBuffer().

Here is the caller graph for this function:

◆ reallocateLargestFreeBuffer()

template<typename MemorySpace>
DefaultBufferHandler< MemorySpace >::buffer_type ippl::DefaultBufferHandler< MemorySpace >::reallocateLargestFreeBuffer ( size_type requiredSize)
private

Definition at line 122 of file BufferHandler.hpp.

References free_buffers, freeSize_m, used_buffers, and usedSize_m.

Referenced by getBuffer().

Here is the caller graph for this function:

◆ releaseUsedBuffer()

template<typename MemorySpace>
void ippl::DefaultBufferHandler< MemorySpace >::releaseUsedBuffer ( buffer_type buffer)
private

Definition at line 80 of file BufferHandler.hpp.

References free_buffers, freeSize_m, used_buffers, and usedSize_m.

Referenced by freeBuffer().

Here is the caller graph for this function:

Member Data Documentation

◆ free_buffers

template<typename MemorySpace>
buffer_set_type ippl::DefaultBufferHandler< MemorySpace >::free_buffers
protected

◆ freeSize_m

template<typename MemorySpace>
size_type ippl::DefaultBufferHandler< MemorySpace >::freeSize_m
private

Total size of all free buffers.

Definition at line 158 of file BufferHandler.h.

Referenced by deleteAllBuffers(), freeAllBuffers(), getFreeBuffer(), getFreeSize(), reallocateLargestFreeBuffer(), and releaseUsedBuffer().

◆ used_buffers

template<typename MemorySpace>
buffer_set_type ippl::DefaultBufferHandler< MemorySpace >::used_buffers
protected
Initial value:

Set of used buffers.

Definition at line 161 of file BufferHandler.h.

Referenced by allocateNewBuffer(), deleteAllBuffers(), freeAllBuffers(), getFreeBuffer(), isBufferUsed(), reallocateLargestFreeBuffer(), and releaseUsedBuffer().

◆ usedSize_m

template<typename MemorySpace>
size_type ippl::DefaultBufferHandler< MemorySpace >::usedSize_m
private

Total size of all allocated buffers.

Definition at line 157 of file BufferHandler.h.

Referenced by allocateNewBuffer(), deleteAllBuffers(), freeAllBuffers(), getFreeBuffer(), getUsedSize(), reallocateLargestFreeBuffer(), and releaseUsedBuffer().


The documentation for this class was generated from the following files: