use dbx_core::{Database, DbxResult};
fn main() -> DbxResult<()> {
println!("=== DBX Example: GPU Acceleration ===\n");
let db = Database::open_in_memory()?;
if db.gpu_manager().is_none() {
println!("⚠️ GPU not available. This example requires CUDA support.");
println!(" Enable the 'gpu' feature in Cargo.toml:");
println!(" dbx-core = {{ version = \"0.0.1-beta\", features = [\"gpu\"] }}");
println!("\n Or run on a system with NVIDIA GPU + CUDA Toolkit.");
return Ok(());
}
println!("✓ GPU acceleration available");
println!("\n--- GPU Availability Check ---");
demo_gpu_check(&db)?;
println!("\n--- GPU Performance Note ---");
demo_performance_note()?;
Ok(())
}
fn demo_gpu_check(db: &Database) -> DbxResult<()> {
if let Some(_gpu) = db.gpu_manager() {
println!("✓ GPU Manager initialized");
println!("✓ GPU is ready for acceleration");
println!("\n📝 To use GPU acceleration:");
println!(" 1. Create Arrow RecordBatch with your data");
println!(" 2. Register table: db.register_table(\"table_name\", batches)");
println!(" 3. Sync to GPU: db.sync_gpu_cache(\"table_name\")");
println!(" 4. Use GPU methods: gpu.sum(), gpu.count(), etc.");
}
Ok(())
}
fn demo_performance_note() -> DbxResult<()> {
println!("=== GPU Performance Tips ===");
println!("• Use larger batches (>1M rows) for better GPU utilization");
println!("• Minimize CPU↔GPU transfers by caching");
println!("• GPU excels at:");
println!(" - SUM, COUNT, AVG aggregations");
println!(" - Filtering large datasets");
println!(" - Hash joins");
println!("• Typical speedup: 2-5x for aggregations");
println!("• Best speedup with Cuckoo hash strategy: up to 73% faster");
println!("\n=== Example GPU Operations ===");
println!("```rust");
println!("// After syncing data to GPU:");
println!("if let Some(gpu) = db.gpu_manager() {{");
println!(" let total = gpu.sum(\"employees\", \"salary\")?;");
println!(" let count = gpu.count(\"employees\")?;");
println!(" let avg = gpu.avg(\"employees\", \"salary\")?;");
println!("}}");
println!("```");
Ok(())
}