use super::workload::Operation;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum QuantScheme {
Symmetric,
Asymmetric,
BlockWise { block_size: usize },
}
#[derive(Debug, Clone, PartialEq, Default)]
pub enum DataTransform {
#[default]
Identity,
Quantize { bits: u8, scheme: QuantScheme },
Tile { tile_size: usize },
Transpose { order: Vec<usize> },
Pad { alignment: usize },
Fuse { ops: Vec<Operation> },
}
impl DataTransform {
pub fn identity() -> Self {
DataTransform::Identity
}
pub fn tile(size: usize) -> Self {
DataTransform::Tile { tile_size: size }
}
pub fn quantize(bits: u8) -> Self {
DataTransform::Quantize {
bits,
scheme: QuantScheme::Symmetric,
}
}
pub fn pad(alignment: usize) -> Self {
DataTransform::Pad { alignment }
}
}