pub mod backend;
pub mod compute_context;
pub mod error;
pub mod fallback;
pub mod memory;
pub mod shaders;
pub mod buffer_pool;
pub mod pressure_monitor;
pub mod kernel_optimizer;
pub mod performance_monitor;
pub mod pipeline_cache;
#[cfg(any(feature = "gpu", feature = "webgpu"))]
pub mod webgpu_backend;
#[cfg(any(feature = "gpu", feature = "webgpu"))]
pub mod device;
#[cfg(all(target_arch = "wasm32", feature = "webgpu"))]
pub mod wasm_gpu_bridge;
pub use backend::{BackendSelector, ComputeProfile};
pub use compute_context::{ComputeContext, ComputePerformanceStats};
pub use error::ComputeError;
pub use fallback::FallbackManager;
pub use memory::{BufferHandle, MemoryStats};
pub use buffer_pool::{
AdvancedBufferPool, BufferCategory, GpuBuffer as AdvancedGpuBuffer, MemoryPressure,
PoolStatisticsSnapshot,
};
pub use pressure_monitor::{
MemoryPressureMonitor, MonitorConfig, MonitoringReport, MonitoringStatistics, PressureReading,
};
pub use memory::{
EnhancedGpuMemoryManager, EnhancedMemoryStats, GpuMemoryConfig, GpuMemoryManager,
GpuMemoryManagerEnhanced, OptimizationResult, WebGPUMemoryManager,
};
pub use kernel_optimizer::{GpuCapabilities, KernelConfig, KernelOptimizer, OptimizationMetrics};
pub use performance_monitor::{
PerformanceAlert, PerformanceMeasurement, PerformanceMonitor, PerformanceStats,
};
pub use pipeline_cache::{CacheStats, CompilationStats, PipelineCache};
pub use backend::{BackendCapabilities, BackendType, MatrixSize, OperationType};
pub use backend::{ComputeBackend, MemoryManager, VectorOps};
#[cfg(any(feature = "gpu", feature = "webgpu"))]
pub use webgpu_backend::WebGPUBackend;
#[cfg(any(feature = "gpu", feature = "webgpu"))]
pub use shaders::*;
#[cfg(any(feature = "gpu", feature = "webgpu"))]
pub use device::GpuDevice;
#[cfg(all(target_arch = "wasm32", feature = "webgpu"))]
pub use wasm_gpu_bridge::{
BrowserCompatibility, CrossOriginManager, SharedBuffer, WasmGpuBridge, WasmMemoryManager,
WasmPerformanceMonitor, WebGpuContext,
};
pub fn has_enhanced_memory_features() -> bool {
cfg!(feature = "gpu")
}
pub fn get_memory_capabilities() -> MemoryCapabilities {
MemoryCapabilities {
webgpu_available: cfg!(feature = "gpu"),
enhanced_features: has_enhanced_memory_features(),
pressure_monitoring: cfg!(feature = "gpu"),
circuit_breaker: cfg!(feature = "gpu"),
buffer_pooling: true,
predictive_analytics: cfg!(feature = "gpu"),
wasm_gpu_bridge: has_wasm_gpu_bridge(),
}
}
#[cfg(target_arch = "wasm32")]
pub fn has_wasm_gpu_bridge() -> bool {
cfg!(feature = "wasm-gpu")
}
#[cfg(not(target_arch = "wasm32"))]
pub fn has_wasm_gpu_bridge() -> bool {
false
}
#[derive(Debug, Clone)]
pub struct MemoryCapabilities {
pub webgpu_available: bool,
pub enhanced_features: bool,
pub pressure_monitoring: bool,
pub circuit_breaker: bool,
pub buffer_pooling: bool,
pub predictive_analytics: bool,
pub wasm_gpu_bridge: bool,
}
impl MemoryCapabilities {
pub fn summary(&self) -> String {
let features = [
("WebGPU", self.webgpu_available),
("Enhanced Features", self.enhanced_features),
("Pressure Monitoring", self.pressure_monitoring),
("Circuit Breaker", self.circuit_breaker),
("Buffer Pooling", self.buffer_pooling),
("Predictive Analytics", self.predictive_analytics),
("WASM GPU Bridge", self.wasm_gpu_bridge),
];
let enabled: Vec<&str> = features
.iter()
.filter_map(|(name, enabled)| if *enabled { Some(*name) } else { None })
.collect();
format!("Memory Capabilities: {}", enabled.join(", "))
}
}
#[cfg(test)]
mod tests;