Expand description
Optimization and performance enhancements for metrics computation
This module provides optimized implementations of metrics calculations for improved performance, memory efficiency, and numerical stability.
The optimization module contains four main components:
parallel- Tools for parallel computation of metricsmemory- Tools for memory-efficient metrics computationnumeric- Tools for numerically stable metrics computationquantum_acceleration- Quantum-inspired algorithms for exponential speedups
§Examples
§Using StableMetrics for numerical stability
use scirs2_metrics::optimization::numeric::StableMetrics;
use scirs2_metrics::error::Result;
fn compute_kl_divergence(p: &[f64], q: &[f64]) -> Result<f64> {
let stable = StableMetrics::<f64>::new()
.with_epsilon(1e-10)
.with_clip_values(true);
stable.kl_divergence(p, q)
}§Using parallel computation for batch metrics
use scirs2_metrics::optimization::parallel::{ParallelConfig, compute_metrics_batch};
use scirs2_metrics::error::Result;
use scirs2_core::ndarray::Array1;
fn compute_multiple_metrics(y_true: &Array1<f64>, y_pred: &Array1<f64>) -> Result<Vec<f64>> {
let config = ParallelConfig {
parallel_enabled: true,
min_chunk_size: 1000,
num_threads: None,
};
let metrics: Vec<Box<dyn Fn(&Array1<f64>, &Array1<f64>) -> Result<f64> + Send + Sync>> = vec![
// Define your metric functions here
];
compute_metrics_batch(y_true, y_pred, &metrics, &config)
}§Using memory-efficient metrics for large datasets
use scirs2_metrics::optimization::memory::{StreamingMetric, ChunkedMetrics};
use scirs2_metrics::error::Result;
struct StreamingMeanAbsoluteError;
impl StreamingMetric<f64> for StreamingMeanAbsoluteError {
type State = (f64, usize); // Running sum and count
fn init_state(&self) -> Self::State {
(0.0, 0)
}
fn update_state(&self, state: &mut Self::State, batch_true: &[f64], batch_pred: &[f64]) -> Result<()> {
for (y_t, y_p) in batch_true.iter().zip(batch_pred.iter()) {
state.0 += (y_t - y_p).abs();
state.1 += 1;
}
Ok(())
}
fn finalize(&self, state: &Self::State) -> Result<f64> {
if state.1 == 0 {
return Err(scirs2_metrics::error::MetricsError::InvalidInput(
"No data processed".to_string()
));
}
Ok(state.0 / state.1 as f64)
}
}§Using quantum-inspired acceleration for large-scale computations
use scirs2_metrics::optimization::quantum_acceleration::{QuantumMetricsComputer, QuantumConfig};
use scirs2_metrics::error::Result;
use scirs2_core::ndarray::Array1;
fn compute_quantum_correlation(x: &Array1<f64>, y: &Array1<f64>) -> Result<f64> {
let config = QuantumConfig::default();
let mut quantum_computer = QuantumMetricsComputer::new(config)?;
quantum_computer.quantum_correlation(&x.view(), &y.view())
}Re-exports§
pub use advanced_memory_optimization::AdvancedMemoryPool;pub use advanced_memory_optimization::AllocationStrategy;pub use advanced_memory_optimization::BlockType;pub use advanced_memory_optimization::MemoryBlock;pub use advanced_memory_optimization::MemoryPoolConfig;pub use advanced_memory_optimization::MemoryStats;pub use advanced_memory_optimization::StrategyBenchmark;pub use distributed::DistributedConfig;pub use distributed::DistributedMetricsBuilder;pub use distributed::DistributedMetricsCoordinator;pub use distributed_advanced::AdvancedClusterConfig;pub use distributed_advanced::AdvancedDistributedCoordinator;pub use distributed_advanced::AutoScalingConfig;pub use distributed_advanced::ClusterState;pub use distributed_advanced::ConsensusAlgorithm;pub use distributed_advanced::ConsensusConfig;pub use distributed_advanced::DistributedTask;pub use distributed_advanced::FaultToleranceConfig;pub use distributed_advanced::LocalityConfig;pub use distributed_advanced::NodeInfo;pub use distributed_advanced::NodeRole;pub use distributed_advanced::NodeStatus;pub use distributed_advanced::OptimizationConfig;pub use distributed_advanced::ResourceRequirements;pub use distributed_advanced::ShardingConfig;pub use distributed_advanced::ShardingStrategy;pub use distributed_advanced::TaskPriority;pub use distributed_advanced::TaskType;pub use gpu_acceleration::BenchmarkResults;pub use gpu_acceleration::GpuAccelConfig;pub use gpu_acceleration::GpuInfo;pub use gpu_acceleration::GpuMetricsComputer;pub use gpu_kernels::AdvancedGpuComputer;pub use gpu_kernels::BatchSettings;pub use gpu_kernels::CudaContext;pub use gpu_kernels::ErrorHandling;pub use gpu_kernels::GpuApi;pub use gpu_kernels::GpuComputeConfig;pub use gpu_kernels::GpuComputeResults;pub use gpu_kernels::GpuPerformanceStats;pub use gpu_kernels::KernelMetrics;pub use gpu_kernels::KernelOptimization;pub use gpu_kernels::MemoryStrategy;pub use gpu_kernels::OpenClContext;pub use gpu_kernels::TransferMetrics;pub use gpu_kernels::VectorizationLevel;pub use hardware::HardwareAccelConfig;pub use hardware::HardwareAcceleratedMatrix;pub use hardware::HardwareCapabilities;pub use hardware::SimdDistanceMetrics;pub use hardware::SimdStatistics;pub use hardware::VectorWidth;pub use memory::ChunkedMetrics;pub use memory::StreamingMetric;pub use numeric::StableMetric;pub use numeric::StableMetrics;pub use parallel::ParallelConfig;pub use quantum_acceleration::InterferencePatterns;pub use quantum_acceleration::QuantumBenchmarkResults;pub use quantum_acceleration::QuantumConfig;pub use quantum_acceleration::QuantumMetricsComputer;pub use quantum_acceleration::QuantumProcessor;pub use quantum_acceleration::SuperpositionManager;pub use quantum_acceleration::VqeParameters;pub use simd_gpu::SimdMetrics;
Modules§
- advanced_
memory_ optimization - Advanced memory optimization for GPU acceleration
- distributed
- Advanced distributed computing with modular architecture
- distributed_
advanced - Advanced distributed optimization with consensus algorithms and fault recovery
- enhanced_
gpu_ kernels - Enhanced GPU acceleration with real compute shaders and kernel optimization
- gpu_
acceleration - GPU acceleration for metrics computation
- gpu_
kernels - Advanced GPU kernels for high-performance metrics computation
- hardware
- Hardware acceleration utilities for metrics computation
- memory
- Memory-efficient metrics computation
- numeric
- Numerically stable implementations of metrics
- parallel
- Parallel computation utilities for metrics
- quantum_
acceleration - Quantum-inspired acceleration for metrics computation
- simd_
gpu - SIMD optimizations and GPU acceleration support for metrics computation