libmir-cuda 0.3.0

CUDA inference backend for libmir
use super::ClampedRoutedExecutionPlan;
use crate::PagedPrefillBatch;

#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub(in crate::backend::clamped_routed) enum ClampedRoutedDecodeSignature {
    Direct { context_bucket: usize },
    Split { partitions: usize },
}

impl ClampedRoutedExecutionPlan {
    pub(in crate::backend::clamped_routed) fn decode_signature(
        &self,
        batch: &PagedPrefillBatch,
    ) -> ClampedRoutedDecodeSignature {
        let partitions = self
            .batch_split_decode
            .as_ref()
            .map_or(0, |split| split.capture_partitions(batch));
        if partitions > 0 {
            ClampedRoutedDecodeSignature::Split { partitions }
        } else {
            ClampedRoutedDecodeSignature::Direct {
                context_bucket: batch.max_context_tokens().div_ceil(128),
            }
        }
    }
}