Skip to main content

oxirs_vec/gpu/
mod.rs

1//! GPU acceleration for vector operations using CUDA
2//!
3//! This module provides GPU acceleration for:
4//! - Distance calculations (cosine, euclidean, etc.)
5//! - Batch vector operations
6//! - Parallel search algorithms
7//! - Matrix operations for embeddings
8//!
9//! # CUDA Feature Gating (Pure Rust Policy)
10//!
11//! GPU acceleration is **optional** and properly feature-gated:
12//! - **Default build**: 100% Pure Rust, no CUDA required, CPU implementations only
13//! - **With `cuda` feature**: GPU acceleration when CUDA toolkit is installed
14//! - **With `cuda` feature but no toolkit**: Graceful fallback to CPU implementations
15//!
16//! All CUDA-dependent code is gated with `#[cfg(all(feature = "cuda", cuda_runtime_available))]`
17//! to ensure the crate builds successfully regardless of CUDA availability.
18
19pub mod accelerator;
20pub mod buffer;
21pub mod config;
22pub mod device;
23pub mod index;
24pub mod index_builder;
25pub mod index_builder_phases;
26#[cfg(test)]
27mod index_builder_tests;
28pub mod index_builder_types;
29pub mod kernels;
30pub mod load_balancer;
31pub mod memory_pool;
32pub mod multi_gpu;
33pub mod performance;
34pub mod runtime;
35pub mod types;
36
37// Re-export key types for convenience
38pub use accelerator::{
39    create_default_accelerator, create_memory_optimized_accelerator,
40    create_performance_accelerator, is_gpu_available, GpuAccelerator,
41};
42pub use buffer::GpuBuffer;
43pub use config::{GpuConfig, OptimizationLevel, PrecisionMode};
44pub use device::GpuDevice;
45pub use index::{AdvancedGpuVectorIndex, BatchVectorProcessor, GpuVectorIndex};
46pub use index_builder::{
47    BatchSizeCalculator, ComputedBatch, GpuBatchDistanceComputer, GpuDistanceMetric,
48    GpuHnswIndexBuilder, GpuIndexBuildStats, GpuIndexBuilderConfig, GpuIndexOptimizer,
49    GpuMemoryBudget, HnswGraph, HnswNode, IncrementalGpuIndexBuilder, IndexedBatch,
50    PipelinedIndexBuilder, PreparedBatch,
51};
52pub use kernels::*;
53pub use load_balancer::{GpuLoadBalancer, SimpleGpuDevice, WorkloadChunk, WorkloadDistributor};
54pub use memory_pool::GpuMemoryPool;
55pub use multi_gpu::{
56    GpuDeviceMetrics, GpuTaskOutput, GpuTaskResult, LoadBalancingStrategy, MultiGpuConfig,
57    MultiGpuConfigFactory, MultiGpuManager, MultiGpuStats, MultiGpuTask, TaskPriority,
58};
59pub use performance::GpuPerformanceStats;
60pub use types::GpuExecutionConfig;