use crate::backend::cpu::CpuBackend;
use crate::Linear;
pub struct CpuGptqLinear {
pub weight_f32: Vec<f32>,
pub bias: Option<Vec<f32>>,
pub in_features: usize,
pub out_features: usize,
}
impl Linear<CpuBackend> for CpuGptqLinear {
fn in_features(&self) -> usize {
self.in_features
}
fn out_features(&self) -> usize {
self.out_features
}
fn forward(
&self,
ctx: &mut <CpuBackend as crate::backend::Backend>::Context,
input: &<CpuBackend as crate::backend::Backend>::Buffer,
out: &mut <CpuBackend as crate::backend::Backend>::Buffer,
m: usize,
) {
<CpuBackend as crate::backend::Backend>::gemm(
ctx,
input,
&self.weight_f32,
out,
m,
self.out_features,
self.in_features,
);
if let Some(bias) = &self.bias {
<CpuBackend as crate::backend::Backend>::add_bias(ctx, out, bias, m, self.out_features);
}
}
}