mumugpu/
lib.rs

1#![allow(unused_imports)]
2#![allow(dead_code)]
3#![allow(unused_variables)]
4#![allow(unused_mut)]
5#![allow(unused_assignments)]
6#![allow(unused_macros)]
7
8mod vulkan;
9mod cpu_ops;
10mod registration;
11mod debug;
12
13pub mod operators;
14pub use operators::{
15    gpu_multiply_bridge,
16    gpu_add_bridge,
17    gpu_subtract_bridge,
18    gpu_hadamard_bridge,
19    gpu_inverse_bridge,
20    gpu_transpose_bridge,
21    gpu_reduce_sum_bridge,
22    gpu_scale_bridge,
23    gpu_to_tensor_bridge,
24    gpu_to_array_bridge,
25    elementwise_op,
26};
27
28pub use vulkan::{AshVulkanContext, VULKAN_CONTEXT};
29pub use cpu_ops::*;
30pub use registration::register_all_gpu_fns;
31#[cfg(debug_assertions)]
32pub use debug::gpu_last_call_bridge;
33
34use std::ffi::{c_void, CStr};
35use core_mumu::parser::interpreter::Interpreter;
36
37#[no_mangle]
38pub unsafe extern "C" fn Cargo_lock(
39    interp_ptr: *mut c_void,
40    extra_str: *const c_void,
41) -> i32 {
42    if interp_ptr.is_null() {
43        eprintln!("[gpu] cargo_lock => null interp ptr");
44        return 1;
45    }
46    let interp = &mut *(interp_ptr as *mut Interpreter);
47
48    let desc = if !extra_str.is_null() {
49        let c_s = CStr::from_ptr(extra_str as *const i8);
50        c_s.to_string_lossy().to_string()
51    } else {
52        "".to_string()
53    };
54
55    if interp.is_verbose() {
56        eprintln!("[gpu] cargo_lock => attempt Vulkan init, extra='{}'", desc);
57    }
58    match vulkan::AshVulkanContext::new() {
59        Ok(ctx) => {
60            *vulkan::VULKAN_CONTEXT.lock().unwrap() = Some(ctx);
61            if interp.is_verbose() {
62                eprintln!("[gpu] Using real Vulkan context => success");
63            }
64        }
65        Err(e) => {
66            eprintln!("[gpu] Vulkan init failed => fallback CPU => error: {}", e);
67            *vulkan::VULKAN_CONTEXT.lock().unwrap() = None;
68        }
69    }
70
71    registration::register_all_gpu_fns(interp);
72    0
73}