pub struct MemoryAwareBatchProcessor<F: Float + Debug> { /* private fields */ }
Expand description
Memory-aware batch processor for handling large datasets
Implementations§
Source§impl<F: Float + Debug + Clone + 'static> MemoryAwareBatchProcessor<F>
impl<F: Float + Debug + Clone + 'static> MemoryAwareBatchProcessor<F>
Sourcepub fn new(
max_memory_mb: usize,
memory_threshold_mb: f64,
pool_size_mb: usize,
) -> Self
pub fn new( max_memory_mb: usize, memory_threshold_mb: f64, pool_size_mb: usize, ) -> Self
Create a new memory-aware batch processor
Examples found in repository?
examples/memory_efficient_example.rs (lines 181-185)
177fn demo_memory_aware_batch_processing() -> Result<()> {
178 println!("\n🔀 Memory-Aware Batch Processing Demo");
179 println!("------------------------------------");
180
181 let mut processor = MemoryAwareBatchProcessor::<f32>::new(
182 200, // 200MB max memory
183 150.0, // 150MB threshold
184 50, // 50MB pool size
185 );
186
187 // Create a large dataset that needs to be processed in chunks
188 println!("Creating large dataset (1000 samples x 784 features)...");
189 let large_dataset = Array2::from_shape_fn((1000, 784), |(i, j)| {
190 (i as f32 * 0.01 + j as f32 * 0.001).sin()
191 })
192 .into_dyn();
193
194 println!("Dataset shape: {:?}", large_dataset.shape());
195 println!(
196 "Estimated memory: {:.2} MB",
197 (large_dataset.len() * std::mem::size_of::<f32>()) as f64 / (1024.0 * 1024.0)
198 );
199
200 // Process in memory-aware batches
201 println!("Processing with automatic batch size adjustment...");
202 let start = Instant::now();
203
204 let results = processor.process_batches(&large_dataset, |batch| {
205 // Simulate some processing (e.g., forward pass through a layer)
206 let processed = batch.mapv(|x| x.tanh()); // Apply activation
207 Ok(processed.to_owned())
208 })?;
209
210 let processing_time = start.elapsed();
211
212 println!("Processing completed in {:?}", processing_time);
213 println!("Number of result batches: {}", results.len());
214
215 // Print statistics
216 let stats = processor.get_stats();
217 println!("Batch processor statistics:");
218 print_batch_processor_stats(&stats);
219
220 Ok(())
221}
Sourcepub fn process_batches<ProcessFn>(
&mut self,
input: &ArrayD<F>,
process_fn: ProcessFn,
) -> Result<Vec<ArrayD<F>>>
pub fn process_batches<ProcessFn>( &mut self, input: &ArrayD<F>, process_fn: ProcessFn, ) -> Result<Vec<ArrayD<F>>>
Process batches with automatic size adjustment based on memory usage
Examples found in repository?
examples/memory_efficient_example.rs (lines 204-208)
177fn demo_memory_aware_batch_processing() -> Result<()> {
178 println!("\n🔀 Memory-Aware Batch Processing Demo");
179 println!("------------------------------------");
180
181 let mut processor = MemoryAwareBatchProcessor::<f32>::new(
182 200, // 200MB max memory
183 150.0, // 150MB threshold
184 50, // 50MB pool size
185 );
186
187 // Create a large dataset that needs to be processed in chunks
188 println!("Creating large dataset (1000 samples x 784 features)...");
189 let large_dataset = Array2::from_shape_fn((1000, 784), |(i, j)| {
190 (i as f32 * 0.01 + j as f32 * 0.001).sin()
191 })
192 .into_dyn();
193
194 println!("Dataset shape: {:?}", large_dataset.shape());
195 println!(
196 "Estimated memory: {:.2} MB",
197 (large_dataset.len() * std::mem::size_of::<f32>()) as f64 / (1024.0 * 1024.0)
198 );
199
200 // Process in memory-aware batches
201 println!("Processing with automatic batch size adjustment...");
202 let start = Instant::now();
203
204 let results = processor.process_batches(&large_dataset, |batch| {
205 // Simulate some processing (e.g., forward pass through a layer)
206 let processed = batch.mapv(|x| x.tanh()); // Apply activation
207 Ok(processed.to_owned())
208 })?;
209
210 let processing_time = start.elapsed();
211
212 println!("Processing completed in {:?}", processing_time);
213 println!("Number of result batches: {}", results.len());
214
215 // Print statistics
216 let stats = processor.get_stats();
217 println!("Batch processor statistics:");
218 print_batch_processor_stats(&stats);
219
220 Ok(())
221}
Sourcepub fn get_stats(&self) -> BatchProcessorStats
pub fn get_stats(&self) -> BatchProcessorStats
Get current batch processor statistics
Examples found in repository?
examples/memory_efficient_example.rs (line 216)
177fn demo_memory_aware_batch_processing() -> Result<()> {
178 println!("\n🔀 Memory-Aware Batch Processing Demo");
179 println!("------------------------------------");
180
181 let mut processor = MemoryAwareBatchProcessor::<f32>::new(
182 200, // 200MB max memory
183 150.0, // 150MB threshold
184 50, // 50MB pool size
185 );
186
187 // Create a large dataset that needs to be processed in chunks
188 println!("Creating large dataset (1000 samples x 784 features)...");
189 let large_dataset = Array2::from_shape_fn((1000, 784), |(i, j)| {
190 (i as f32 * 0.01 + j as f32 * 0.001).sin()
191 })
192 .into_dyn();
193
194 println!("Dataset shape: {:?}", large_dataset.shape());
195 println!(
196 "Estimated memory: {:.2} MB",
197 (large_dataset.len() * std::mem::size_of::<f32>()) as f64 / (1024.0 * 1024.0)
198 );
199
200 // Process in memory-aware batches
201 println!("Processing with automatic batch size adjustment...");
202 let start = Instant::now();
203
204 let results = processor.process_batches(&large_dataset, |batch| {
205 // Simulate some processing (e.g., forward pass through a layer)
206 let processed = batch.mapv(|x| x.tanh()); // Apply activation
207 Ok(processed.to_owned())
208 })?;
209
210 let processing_time = start.elapsed();
211
212 println!("Processing completed in {:?}", processing_time);
213 println!("Number of result batches: {}", results.len());
214
215 // Print statistics
216 let stats = processor.get_stats();
217 println!("Batch processor statistics:");
218 print_batch_processor_stats(&stats);
219
220 Ok(())
221}
Auto Trait Implementations§
impl<F> Freeze for MemoryAwareBatchProcessor<F>
impl<F> RefUnwindSafe for MemoryAwareBatchProcessor<F>where
F: RefUnwindSafe,
impl<F> Send for MemoryAwareBatchProcessor<F>where
F: Send,
impl<F> Sync for MemoryAwareBatchProcessor<F>where
F: Sync,
impl<F> Unpin for MemoryAwareBatchProcessor<F>
impl<F> UnwindSafe for MemoryAwareBatchProcessor<F>where
F: RefUnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
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>
Converts
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>
Converts
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