pub struct ThreadLocalPoolManager { /* private fields */ }Expand description
Manager for thread-local memory pools
This provides a global interface to thread-local pools with zero contention. Each thread maintains its own pools for f32 and f64 buffers.
§Thread Safety
Thread-local pools are completely thread-safe without any locks because each thread has its own storage. There is no contention between threads.
§Example
use tenrso_exec::executor::thread_local_pool::ThreadLocalPoolManager;
use std::thread;
let manager = ThreadLocalPoolManager::new();
manager.enable();
// Spawn threads - each will use its own pool
let handles: Vec<_> = (0..4)
.map(|_| {
let mgr = manager.clone();
thread::spawn(move || {
for _ in 0..100 {
let buf = mgr.acquire_f64(&[1000]);
mgr.release_f64(&[1000], buf);
}
})
})
.collect();
for h in handles {
h.join().unwrap();
}
// Get aggregated statistics from the main thread
let stats = manager.aggregated_stats_f64();
println!("Main thread hit rate: {:.2}%", stats.overall_hit_rate * 100.0);Implementations§
Source§impl ThreadLocalPoolManager
impl ThreadLocalPoolManager
Sourcepub fn is_enabled(&self) -> bool
pub fn is_enabled(&self) -> bool
Check if pooling is enabled
Sourcepub fn acquire_f32(&self, shape: &[usize]) -> Vec<f32>
pub fn acquire_f32(&self, shape: &[usize]) -> Vec<f32>
Acquire an f32 buffer from the current thread’s pool
Sourcepub fn release_f32(&self, shape: &[usize], buffer: Vec<f32>)
pub fn release_f32(&self, shape: &[usize], buffer: Vec<f32>)
Release an f32 buffer back to the current thread’s pool
Sourcepub fn acquire_f64(&self, shape: &[usize]) -> Vec<f64>
pub fn acquire_f64(&self, shape: &[usize]) -> Vec<f64>
Acquire an f64 buffer from the current thread’s pool
Sourcepub fn release_f64(&self, shape: &[usize], buffer: Vec<f64>)
pub fn release_f64(&self, shape: &[usize], buffer: Vec<f64>)
Release an f64 buffer back to the current thread’s pool
Sourcepub fn thread_stats_f32(&self) -> ThreadLocalPoolStats
pub fn thread_stats_f32(&self) -> ThreadLocalPoolStats
Get statistics for the current thread’s f32 pool
Sourcepub fn thread_stats_f64(&self) -> ThreadLocalPoolStats
pub fn thread_stats_f64(&self) -> ThreadLocalPoolStats
Get statistics for the current thread’s f64 pool
Sourcepub fn clear_thread_f32(&self)
pub fn clear_thread_f32(&self)
Clear the current thread’s f32 pool
Sourcepub fn clear_thread_f64(&self)
pub fn clear_thread_f64(&self)
Clear the current thread’s f64 pool
Sourcepub fn aggregated_stats_f32(&self) -> AggregatedPoolStats
pub fn aggregated_stats_f32(&self) -> AggregatedPoolStats
Get aggregated statistics from all threads (f32)
Note: This requires cooperation from all threads. The returned statistics only include the current thread’s data since we can’t access other threads’ thread-local storage directly.
For true multi-thread statistics, use the shared MemoryPool instead.
Sourcepub fn aggregated_stats_f64(&self) -> AggregatedPoolStats
pub fn aggregated_stats_f64(&self) -> AggregatedPoolStats
Get aggregated statistics from all threads (f64)
Trait Implementations§
Source§impl Clone for ThreadLocalPoolManager
impl Clone for ThreadLocalPoolManager
Source§fn clone(&self) -> ThreadLocalPoolManager
fn clone(&self) -> ThreadLocalPoolManager
1.0.0§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl Freeze for ThreadLocalPoolManager
impl RefUnwindSafe for ThreadLocalPoolManager
impl Send for ThreadLocalPoolManager
impl Sync for ThreadLocalPoolManager
impl Unpin for ThreadLocalPoolManager
impl UnwindSafe for ThreadLocalPoolManager
Blanket Implementations§
§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§unsafe fn clone_to_uninit(&self, dest: *mut u8)
unsafe fn clone_to_uninit(&self, dest: *mut u8)
clone_to_uninit)Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more