Skip to main content

MemoryPool

Struct MemoryPool 

Source
pub struct MemoryPool { /* private fields */ }
Expand description

Memory pool for efficient GPU memory management

Implementations§

Source§

impl MemoryPool

Source

pub fn new( device: Arc<Device>, pool_size: u64, usage: BufferUsages, ) -> Result<Self>

Create a new memory pool

Source

pub fn with_config( device: Arc<Device>, pool_size: u64, usage: BufferUsages, defrag_config: DefragConfig, ) -> Result<Self>

Create a new memory pool with custom defragmentation configuration

Source

pub fn allocate( self: &Arc<Self>, size: u64, alignment: u64, ) -> Result<MemoryAllocation>

Allocate memory from the pool

Source

pub fn get_allocation_offset(&self, alloc_id: u64) -> Option<u64>

Get the current offset for an allocation ID Returns None if the allocation is not found

Source

pub fn pin_allocation(&self, alloc_id: u64) -> Result<()>

Pin an allocation to prevent it from being moved during defragmentation

Source

pub fn unpin_allocation(&self, alloc_id: u64) -> Result<()>

Unpin an allocation to allow it to be moved during defragmentation

Source

pub fn set_defrag_config(&self, config: DefragConfig)

Set the defragmentation configuration

Source

pub fn get_defrag_config(&self) -> DefragConfig

Get the current defragmentation configuration

Source

pub fn plan_defragmentation(&self) -> DefragmentationPlan

Create a defragmentation plan without executing it

This analyzes the current memory layout and creates a plan for compacting allocations. The plan can be inspected before executing.

Source

pub fn defragment(&self) -> Result<DefragmentationResult>

Defragment the pool (logical defragmentation - metadata only)

This method updates the block metadata without performing GPU memory copies. It’s useful for testing or when you plan to recreate the data anyway.

For actual GPU memory defragmentation with data preservation, use defragment_with_queue() instead.

Source

pub fn defragment_with_queue( &self, queue: &Queue, ) -> Result<DefragmentationResult>

Defragment the pool with GPU memory copies

This method performs actual GPU memory copies to compact allocations. It requires a Queue for command submission.

§Arguments
  • queue - The GPU queue for submitting copy commands
§Returns

A DefragmentationResult describing what was done

Source

pub fn needs_defragmentation(&self) -> bool

Check if defragmentation is needed based on current configuration

Source

pub fn get_fragmentation(&self) -> f64

Get fragmentation level (0.0 - 1.0)

Source

pub fn get_total_bytes_defragged(&self) -> u64

Get total bytes defragmented across all defragmentation operations

Source

pub fn time_since_last_defrag(&self) -> Option<Duration>

Get the time since the last defragmentation

Source

pub fn buffer(&self) -> Option<Buffer>

Get pool buffer

Source

pub fn get_available_memory(&self) -> u64

Get available memory

Source

pub fn get_current_usage(&self) -> u64

Get current memory usage

Source

pub fn get_peak_usage(&self) -> u64

Get peak memory usage

Source

pub fn get_stats(&self) -> MemoryPoolStats

Get memory statistics

Source

pub fn print_stats(&self)

Print pool statistics

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> WasmNotSend for T
where T: Send,

Source§

impl<T> WasmNotSendSync for T

Source§

impl<T> WasmNotSync for T
where T: Sync,