1pub fn print_startup_log() {
3 let dispatch_table = crate::backend::get_dispatch_table();
5 let validation = crate::backend::validate_backends();
6
7 let name = env!("CARGO_PKG_NAME");
9 let version = env!("CARGO_PKG_VERSION");
10
11 let funcs = [
13 "add",
14 "mul",
15 "sum",
16 "Array::new",
17 "add_ct! / mul_ct! / sum_ct!",
18 ];
19
20 let backends = ["cpu", "webgpu", "cuda", "metal", "blas"];
22
23 let selected = if validation.blas_validated {
25 "blas"
26 } else if validation.webgpu_validated {
27 "webgpu"
28 } else if validation.gpu_validated {
29 "cuda/metal"
30 } else if validation.simd_validated {
31 "cpu-simd"
32 } else {
33 "cpu-scalar"
34 };
35
36 eprintln!(
38 "[{} {}] available APIs: {}",
39 name,
40 version,
41 funcs.join(", ")
42 );
43 eprintln!(
44 "[{} {}] supported backends: {}",
45 name,
46 version,
47 backends.join(", ")
48 );
49 eprintln!("[{} {}] selected backend: {}", name, version, selected);
50
51 eprintln!(
53 "[{} {}] op -> backend mapping: add -> {} ; mul -> {} ; sum -> {} ; matmul -> {}",
54 name,
55 version,
56 dispatch_table.elementwise_backend,
57 dispatch_table.elementwise_backend, dispatch_table.reduction_backend,
59 dispatch_table.matmul_backend
60 );
61
62 let caps = crate::backend::RuntimeCapabilities {
64 has_simd: validation.simd_validated,
65 has_gpu: validation.gpu_validated || validation.webgpu_validated,
66 has_blas: validation.blas_validated,
67 has_threads: num_cpus::get() > 1,
68 has_wasm_simd: false,
69 has_webgpu: validation.webgpu_validated,
70 };
71 eprintln!("[{} {}] runtime caps: has_simd={} has_gpu={} has_blas={} has_threads={} has_wasm_simd={} has_webgpu={}",
72 name, version, caps.has_simd, caps.has_gpu, caps.has_blas, caps.has_threads, caps.has_wasm_simd, caps.has_webgpu);
73
74 eprintln!("[{} {}] === DISPATCH TABLE (ZERO-COST) ===", name, version);
76 eprintln!(
77 "[{} {}] elementwise: {} | reduction: {} | matmul: {} | dot: {}",
78 name,
79 version,
80 dispatch_table.elementwise_backend,
81 dispatch_table.reduction_backend,
82 dispatch_table.matmul_backend,
83 dispatch_table.dot_backend
84 );
85 eprintln!(
86 "[{} {}] validation: blas={} metal={} webgpu={} simd={}",
87 name,
88 version,
89 validation.blas_validated,
90 validation.metal_validated,
91 validation.webgpu_validated,
92 validation.simd_validated
93 );
94}