use std::sync::Arc;
use cudarc::driver::CudaStream;
use crate::mamba_ssm::gpu::context::GpuCtx;
use crate::mamba_ssm::gpu::dtype::WeightDtype;
use crate::mamba3_siso::config::Mamba3Config;
use crate::mamba3_siso::gpu::weights::{GpuMamba3MixedWeights, GpuMamba3Weights};
use crate::mamba3_siso::weights::Mamba3Weights;
pub struct GpuMamba3TrainMixedWeights {
pub master: GpuMamba3Weights,
pub compute: GpuMamba3MixedWeights,
pub dtype: WeightDtype,
}
impl GpuMamba3TrainMixedWeights {
pub fn from_cpu(
stream: &Arc<CudaStream>,
cpu: &Mamba3Weights,
cfg: &Mamba3Config,
input_dim: usize,
dtype: WeightDtype,
) -> Result<Self, String> {
let master = GpuMamba3Weights::from_cpu(stream, cpu, cfg, input_dim)?;
let compute = GpuMamba3MixedWeights::from_cpu(stream, cpu, dtype)?;
Ok(Self {
master,
compute,
dtype,
})
}
pub fn sync_master_to_compute(&self, ctx: &GpuCtx) -> Result<(), String> {
let _ = ctx;
Ok(())
}
}