use zer_compute::{
backend::{BackendPreference, DeviceBackend},
kernels::hello_backend::{HelloBackend, HelloBackendInput},
};
fn main() {
println!("=== Auto-detect ===");
run_hello(&DeviceBackend::auto_detect());
println!("\n=== CPU (forced) ===");
match DeviceBackend::from_preference(BackendPreference::Cpu) {
Ok(b) => run_hello(&b),
Err(e) => println!(" error: {e}"),
}
println!("\n=== CUDA (forced) ===");
match DeviceBackend::from_preference(BackendPreference::Cuda) {
Ok(b) => run_hello(&b),
Err(e) => println!(" not available: {e}"),
}
println!("\n=== Vulkan (forced) ===");
match DeviceBackend::from_preference(BackendPreference::Vulkan) {
Ok(b) => run_hello(&b),
Err(e) => println!(" not available: {e}"),
}
println!("\n=== AVX2 (forced) ===");
match DeviceBackend::from_preference(BackendPreference::Avx2) {
Ok(b) => run_hello(&b),
Err(e) => println!(" not available: {e}"),
}
}
fn run_hello(backend: &DeviceBackend) {
print!(" backend={:<6} ", backend.name());
match backend.run::<HelloBackend>(HelloBackendInput) {
Ok(out) if out.token != 0 => {
println!("token={:#010X} ✓ kernel confirmed", out.token);
}
Ok(out) => {
println!("token={:#010X} ✗ zero token, kernel did not execute", out.token);
}
Err(e) => println!("dispatch error: {e}"),
}
}