Skip to main content

cbtop/grammar/
transform.rs

1//! Data transform (Statistics equivalent in Grammar of Graphics).
2
3use super::workload::Operation;
4
5/// Quantization scheme
6#[derive(Debug, Clone, Copy, PartialEq, Eq)]
7pub enum QuantScheme {
8    /// Symmetric quantization
9    Symmetric,
10    /// Asymmetric quantization
11    Asymmetric,
12    /// Block-wise quantization (GGML-style)
13    BlockWise { block_size: usize },
14}
15
16/// Data transform (analogous to Statistics)
17#[derive(Debug, Clone, PartialEq, Default)]
18pub enum DataTransform {
19    /// No transformation
20    #[default]
21    Identity,
22    /// Quantize to lower precision
23    Quantize { bits: u8, scheme: QuantScheme },
24    /// Tile for cache efficiency
25    Tile { tile_size: usize },
26    /// Transpose for memory layout
27    Transpose { order: Vec<usize> },
28    /// Pad for alignment
29    Pad { alignment: usize },
30    /// Fuse multiple operations
31    Fuse { ops: Vec<Operation> },
32}
33
34impl DataTransform {
35    /// Create identity transform
36    pub fn identity() -> Self {
37        DataTransform::Identity
38    }
39
40    /// Create tiling transform
41    pub fn tile(size: usize) -> Self {
42        DataTransform::Tile { tile_size: size }
43    }
44
45    /// Create quantization transform
46    pub fn quantize(bits: u8) -> Self {
47        DataTransform::Quantize {
48            bits,
49            scheme: QuantScheme::Symmetric,
50        }
51    }
52
53    /// Create padding transform
54    pub fn pad(alignment: usize) -> Self {
55        DataTransform::Pad { alignment }
56    }
57}