Skip to main content

rfann/webgpu/
mod.rs

1//! WebGPU compute backend for rfann neural networks
2//!
3//! This module provides GPU acceleration for neural network operations using WebGPU.
4//! It includes automatic fallback to SIMD/CPU backends when GPU is unavailable.
5//!
6//! Advanced features:
7//! - Pipeline caching for optimized shader compilation
8//! - Kernel optimization for different GPU architectures
9//! - Performance monitoring and auto-tuning
10//! - Comprehensive gradient operations for training
11//! - Advanced 5-tier buffer pooling system
12//! - Real-time memory pressure monitoring
13//! - Circuit breaker protection and predictive analytics
14
15pub mod backend;
16pub mod compute_context;
17pub mod error;
18pub mod fallback;
19pub mod memory;
20pub mod shaders;
21
22// Enhanced memory management components
23pub mod buffer_pool;
24pub mod pressure_monitor;
25
26// Advanced shader system components
27pub mod kernel_optimizer;
28pub mod performance_monitor;
29pub mod pipeline_cache;
30
31#[cfg(any(feature = "gpu", feature = "webgpu"))]
32pub mod webgpu_backend;
33
34#[cfg(any(feature = "gpu", feature = "webgpu"))]
35pub mod device;
36
37// WASM GPU bridge for browser deployment
38#[cfg(all(target_arch = "wasm32", feature = "webgpu"))]
39pub mod wasm_gpu_bridge;
40
41// Re-export main types
42pub use backend::{BackendSelector, ComputeProfile};
43pub use compute_context::{ComputeContext, ComputePerformanceStats};
44pub use error::ComputeError;
45pub use fallback::FallbackManager;
46pub use memory::{BufferHandle, MemoryStats};
47
48// Re-export enhanced memory management
49pub use buffer_pool::{
50    AdvancedBufferPool, BufferCategory, GpuBuffer as AdvancedGpuBuffer, MemoryPressure,
51    PoolStatisticsSnapshot,
52};
53pub use pressure_monitor::{
54    MemoryPressureMonitor, MonitorConfig, MonitoringReport, MonitoringStatistics, PressureReading,
55};
56// Enhanced memory types are now in memory module
57pub use memory::{
58    EnhancedGpuMemoryManager, EnhancedMemoryStats, GpuMemoryConfig, GpuMemoryManager,
59    GpuMemoryManagerEnhanced, OptimizationResult, WebGPUMemoryManager,
60};
61
62// Re-export advanced shader system components
63pub use kernel_optimizer::{GpuCapabilities, KernelConfig, KernelOptimizer, OptimizationMetrics};
64pub use performance_monitor::{
65    PerformanceAlert, PerformanceMeasurement, PerformanceMonitor, PerformanceStats,
66};
67pub use pipeline_cache::{CacheStats, CompilationStats, PipelineCache};
68
69// Re-export traits
70pub use backend::{BackendCapabilities, BackendType, MatrixSize, OperationType};
71pub use backend::{ComputeBackend, MemoryManager, VectorOps};
72
73// Re-export WebGPU backend when available
74#[cfg(any(feature = "gpu", feature = "webgpu"))]
75pub use webgpu_backend::WebGPUBackend;
76
77#[cfg(any(feature = "gpu", feature = "webgpu"))]
78pub use shaders::*;
79
80#[cfg(any(feature = "gpu", feature = "webgpu"))]
81pub use device::GpuDevice;
82
83// Re-export WASM GPU bridge for browser deployment
84#[cfg(all(target_arch = "wasm32", feature = "webgpu"))]
85pub use wasm_gpu_bridge::{
86    BrowserCompatibility, CrossOriginManager, SharedBuffer, WasmGpuBridge, WasmMemoryManager,
87    WasmPerformanceMonitor, WebGpuContext,
88};
89
90/// Check if enhanced memory management features are available
91pub fn has_enhanced_memory_features() -> bool {
92    cfg!(feature = "gpu")
93}
94
95/// Get memory management capabilities summary
96pub fn get_memory_capabilities() -> MemoryCapabilities {
97    MemoryCapabilities {
98        webgpu_available: cfg!(feature = "gpu"),
99        enhanced_features: has_enhanced_memory_features(),
100        pressure_monitoring: cfg!(feature = "gpu"),
101        circuit_breaker: cfg!(feature = "gpu"),
102        buffer_pooling: true,
103        predictive_analytics: cfg!(feature = "gpu"),
104        wasm_gpu_bridge: has_wasm_gpu_bridge(),
105    }
106}
107
108/// Check if WASM GPU bridge is available
109#[cfg(target_arch = "wasm32")]
110pub fn has_wasm_gpu_bridge() -> bool {
111    cfg!(feature = "wasm-gpu")
112}
113
114#[cfg(not(target_arch = "wasm32"))]
115pub fn has_wasm_gpu_bridge() -> bool {
116    false
117}
118
119/// Memory management capabilities
120#[derive(Debug, Clone)]
121pub struct MemoryCapabilities {
122    pub webgpu_available: bool,
123    pub enhanced_features: bool,
124    pub pressure_monitoring: bool,
125    pub circuit_breaker: bool,
126    pub buffer_pooling: bool,
127    pub predictive_analytics: bool,
128    pub wasm_gpu_bridge: bool,
129}
130
131impl MemoryCapabilities {
132    /// Get capabilities summary string
133    pub fn summary(&self) -> String {
134        let features = [
135            ("WebGPU", self.webgpu_available),
136            ("Enhanced Features", self.enhanced_features),
137            ("Pressure Monitoring", self.pressure_monitoring),
138            ("Circuit Breaker", self.circuit_breaker),
139            ("Buffer Pooling", self.buffer_pooling),
140            ("Predictive Analytics", self.predictive_analytics),
141            ("WASM GPU Bridge", self.wasm_gpu_bridge),
142        ];
143
144        let enabled: Vec<&str> = features
145            .iter()
146            .filter_map(|(name, enabled)| if *enabled { Some(*name) } else { None })
147            .collect();
148
149        format!("Memory Capabilities: {}", enabled.join(", "))
150    }
151}
152
153// Tests
154#[cfg(test)]
155mod tests;