metrale_model_arch/glm5next_layer/
state.rs1use anyhow::Result;
13use metrale_gpu_runtime::gpu::GpuBackend;
14
15use crate::glm5next_kda::Glm5NextKdaConfig;
16use metrale_model_layers::layer::SsmLayerState;
17
18pub fn alloc_kda_ssm_state(gpu: &dyn GpuBackend, cfg: &Glm5NextKdaConfig) -> Result<SsmLayerState> {
22 let h_bytes = cfg.recurrent_state_elems() * 4;
23 let conv_bytes = cfg.conv_state_elems() * 4;
24 let h_state = gpu.alloc(h_bytes)?;
25 let conv_state = gpu.alloc(conv_bytes)?;
26 gpu.memset_async(h_state, 0, h_bytes, 0)?;
27 gpu.memset_async(conv_state, 0, conv_bytes, 0)?;
28 gpu.synchronize(0)?;
29 Ok(SsmLayerState {
30 h_state,
31 conv_state,
32 h_state_checkpoint: None,
33 conv_state_checkpoint: None,
34 h_state_intermediates: Vec::new(),
35 conv_state_intermediates: Vec::new(),
36 h_is_f16: false,
37 h_prefill_stage: None,
38 ple: None,
39 })
40}