pub struct ThreadPoolManager { /* private fields */ }
Expand description
Thread pool manager for parallel neural network operations
Manages a pool of worker threads for parallel execution of neural network operations, providing load balancing and efficient resource utilization.
Implementations§
Source§impl ThreadPoolManager
impl ThreadPoolManager
Sourcepub fn new(num_threads: Option<usize>) -> Result<Self>
pub fn new(num_threads: Option<usize>) -> Result<Self>
Create a new thread pool manager
§Arguments
num_threads
- Number of threads in the pool (None for automatic detection)
§Examples
use scirs2_neural::performance::threading::ThreadPoolManager;
// Auto-detect thread count
let pool = ThreadPoolManager::new(None).unwrap();
// Specify thread count
let pool = ThreadPoolManager::new(Some(8)).unwrap();
Examples found in repository?
examples/new_features_showcase.rs (line 134)
128fn demonstrate_performance_optimizations() -> Result<(), Box<dyn std::error::Error>> {
129 println!("⚡ Performance Optimizations Demonstration");
130 println!("========================================\n");
131
132 // 1. Thread Pool Manager
133 println!("1. Thread Pool Manager:");
134 let thread_pool = ThreadPoolManager::new(Some(4))?;
135 println!(
136 " Created thread pool with {} threads",
137 thread_pool.num_threads()
138 );
139
140 // Demonstrate parallel matrix multiplication
141 let matrix_a = Array::from_elem((100, 50), 2.0f32).into_dyn();
142 let matrix_b = Array::from_elem((50, 75), 3.0f32).into_dyn();
143
144 let start_time = std::time::Instant::now();
145 let result = thread_pool.parallel_matmul(&matrix_a, &matrix_b)?;
146 let elapsed = start_time.elapsed();
147
148 println!(
149 " Parallel matrix multiplication: {}x{} * {}x{} = {}x{}",
150 matrix_a.shape()[0],
151 matrix_a.shape()[1],
152 matrix_b.shape()[0],
153 matrix_b.shape()[1],
154 result.shape()[0],
155 result.shape()[1]
156 );
157 println!(" Time elapsed: {:.3}ms", elapsed.as_secs_f64() * 1000.0);
158 println!(" Result sample: {:.1}", result[[0, 0]]);
159
160 // 2. Performance Profiler
161 println!("\n2. Performance Profiler:");
162 let mut optimizer = PerformanceOptimizer::new(Some(1024), Some(512), Some(4), true)?;
163
164 // Simulate some operations with profiling
165 {
166 let timer = optimizer.profiler_mut().start_timer("matrix_setup");
167 let test_matrix_a = Array::from_elem((200, 100), 1.5f32).into_dyn();
168 let test_matrix_b = Array::from_elem((100, 150), 2.5f32).into_dyn();
169 optimizer
170 .profiler_mut()
171 .end_timer("matrix_setup".to_string(), timer);
172
173 let _result = optimizer.optimized_matmul(&test_matrix_a, &test_matrix_b)?;
174 }
175
176 println!(" Performance profile summary:");
177 optimizer.profiler().print_summary();
178
179 // 3. Optimization Capabilities
180 println!("\n3. Optimization Capabilities:");
181 let capabilities = optimizer.get_capabilities();
182 println!("{}", capabilities);
183
184 println!("✅ Performance optimizations demonstration completed!\n");
185 Ok(())
186}
Sourcepub fn execute<F, R>(&self, f: F) -> R
pub fn execute<F, R>(&self, f: F) -> R
Execute a function in the thread pool (no-op without parallel)
Sourcepub fn parallel_matmul(
&self,
a: &ArrayD<f32>,
b: &ArrayD<f32>,
) -> Result<ArrayD<f32>>
pub fn parallel_matmul( &self, a: &ArrayD<f32>, b: &ArrayD<f32>, ) -> Result<ArrayD<f32>>
Parallel matrix multiplication using thread pool
Performs matrix multiplication with automatic parallelization across available threads for improved performance on large matrices.
Examples found in repository?
examples/new_features_showcase.rs (line 145)
128fn demonstrate_performance_optimizations() -> Result<(), Box<dyn std::error::Error>> {
129 println!("⚡ Performance Optimizations Demonstration");
130 println!("========================================\n");
131
132 // 1. Thread Pool Manager
133 println!("1. Thread Pool Manager:");
134 let thread_pool = ThreadPoolManager::new(Some(4))?;
135 println!(
136 " Created thread pool with {} threads",
137 thread_pool.num_threads()
138 );
139
140 // Demonstrate parallel matrix multiplication
141 let matrix_a = Array::from_elem((100, 50), 2.0f32).into_dyn();
142 let matrix_b = Array::from_elem((50, 75), 3.0f32).into_dyn();
143
144 let start_time = std::time::Instant::now();
145 let result = thread_pool.parallel_matmul(&matrix_a, &matrix_b)?;
146 let elapsed = start_time.elapsed();
147
148 println!(
149 " Parallel matrix multiplication: {}x{} * {}x{} = {}x{}",
150 matrix_a.shape()[0],
151 matrix_a.shape()[1],
152 matrix_b.shape()[0],
153 matrix_b.shape()[1],
154 result.shape()[0],
155 result.shape()[1]
156 );
157 println!(" Time elapsed: {:.3}ms", elapsed.as_secs_f64() * 1000.0);
158 println!(" Result sample: {:.1}", result[[0, 0]]);
159
160 // 2. Performance Profiler
161 println!("\n2. Performance Profiler:");
162 let mut optimizer = PerformanceOptimizer::new(Some(1024), Some(512), Some(4), true)?;
163
164 // Simulate some operations with profiling
165 {
166 let timer = optimizer.profiler_mut().start_timer("matrix_setup");
167 let test_matrix_a = Array::from_elem((200, 100), 1.5f32).into_dyn();
168 let test_matrix_b = Array::from_elem((100, 150), 2.5f32).into_dyn();
169 optimizer
170 .profiler_mut()
171 .end_timer("matrix_setup".to_string(), timer);
172
173 let _result = optimizer.optimized_matmul(&test_matrix_a, &test_matrix_b)?;
174 }
175
176 println!(" Performance profile summary:");
177 optimizer.profiler().print_summary();
178
179 // 3. Optimization Capabilities
180 println!("\n3. Optimization Capabilities:");
181 let capabilities = optimizer.get_capabilities();
182 println!("{}", capabilities);
183
184 println!("✅ Performance optimizations demonstration completed!\n");
185 Ok(())
186}
Sourcepub fn parallel_conv2d(
&self,
input: &ArrayD<f32>,
kernel: &ArrayD<f32>,
bias: Option<&[f32]>,
stride: (usize, usize),
padding: (usize, usize),
) -> Result<ArrayD<f32>>
pub fn parallel_conv2d( &self, input: &ArrayD<f32>, kernel: &ArrayD<f32>, bias: Option<&[f32]>, stride: (usize, usize), padding: (usize, usize), ) -> Result<ArrayD<f32>>
Parallel convolution operation
Sourcepub fn num_threads(&self) -> usize
pub fn num_threads(&self) -> usize
Get the number of threads in the pool
Examples found in repository?
examples/new_features_showcase.rs (line 137)
128fn demonstrate_performance_optimizations() -> Result<(), Box<dyn std::error::Error>> {
129 println!("⚡ Performance Optimizations Demonstration");
130 println!("========================================\n");
131
132 // 1. Thread Pool Manager
133 println!("1. Thread Pool Manager:");
134 let thread_pool = ThreadPoolManager::new(Some(4))?;
135 println!(
136 " Created thread pool with {} threads",
137 thread_pool.num_threads()
138 );
139
140 // Demonstrate parallel matrix multiplication
141 let matrix_a = Array::from_elem((100, 50), 2.0f32).into_dyn();
142 let matrix_b = Array::from_elem((50, 75), 3.0f32).into_dyn();
143
144 let start_time = std::time::Instant::now();
145 let result = thread_pool.parallel_matmul(&matrix_a, &matrix_b)?;
146 let elapsed = start_time.elapsed();
147
148 println!(
149 " Parallel matrix multiplication: {}x{} * {}x{} = {}x{}",
150 matrix_a.shape()[0],
151 matrix_a.shape()[1],
152 matrix_b.shape()[0],
153 matrix_b.shape()[1],
154 result.shape()[0],
155 result.shape()[1]
156 );
157 println!(" Time elapsed: {:.3}ms", elapsed.as_secs_f64() * 1000.0);
158 println!(" Result sample: {:.1}", result[[0, 0]]);
159
160 // 2. Performance Profiler
161 println!("\n2. Performance Profiler:");
162 let mut optimizer = PerformanceOptimizer::new(Some(1024), Some(512), Some(4), true)?;
163
164 // Simulate some operations with profiling
165 {
166 let timer = optimizer.profiler_mut().start_timer("matrix_setup");
167 let test_matrix_a = Array::from_elem((200, 100), 1.5f32).into_dyn();
168 let test_matrix_b = Array::from_elem((100, 150), 2.5f32).into_dyn();
169 optimizer
170 .profiler_mut()
171 .end_timer("matrix_setup".to_string(), timer);
172
173 let _result = optimizer.optimized_matmul(&test_matrix_a, &test_matrix_b)?;
174 }
175
176 println!(" Performance profile summary:");
177 optimizer.profiler().print_summary();
178
179 // 3. Optimization Capabilities
180 println!("\n3. Optimization Capabilities:");
181 let capabilities = optimizer.get_capabilities();
182 println!("{}", capabilities);
183
184 println!("✅ Performance optimizations demonstration completed!\n");
185 Ok(())
186}
Sourcepub fn get_stats(&self) -> ThreadPoolStats
pub fn get_stats(&self) -> ThreadPoolStats
Get thread pool statistics
Auto Trait Implementations§
impl Freeze for ThreadPoolManager
impl RefUnwindSafe for ThreadPoolManager
impl Send for ThreadPoolManager
impl Sync for ThreadPoolManager
impl Unpin for ThreadPoolManager
impl UnwindSafe for ThreadPoolManager
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