use crate::HwdnaError;
pub struct JitKernel {
name: String,
#[allow(dead_code)]
code: Vec<u8>,
}
impl JitKernel {
pub fn new(name: &str, code: Vec<u8>) -> Self {
Self { name: name.into(), code }
}
pub fn name(&self) -> &str {
&self.name
}
}
pub struct JitEngine {
cache: Vec<JitKernel>,
}
impl JitEngine {
pub fn new() -> Self {
Self { cache: Vec::new() }
}
pub fn compile_dot(&mut self, n: usize) -> Result<usize, HwdnaError> {
let name = format!("dot_{}", n);
if let Some(idx) = self.cache.iter().position(|k| k.name() == name) {
return Ok(idx);
}
let code = Vec::new();
self.cache.push(JitKernel::new(&name, code));
Ok(self.cache.len() - 1)
}
pub fn compile_matmul(&mut self, n: usize) -> Result<usize, HwdnaError> {
let name = format!("matmul_{}x{}", n, n);
if let Some(idx) = self.cache.iter().position(|k| k.name() == name) {
return Ok(idx);
}
let code = Vec::new();
self.cache.push(JitKernel::new(&name, code));
Ok(self.cache.len() - 1)
}
pub fn cache_size(&self) -> usize {
self.cache.len()
}
}