use crate::{BoundChecks, IdleMode, VectorizationMode};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct ReduceBlueprint {
pub vectorization_mode: VectorizationMode,
pub global: GlobalReduceBlueprint,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum GlobalReduceBlueprint {
Unit(UnitReduceBlueprint),
Plane(PlaneReduceBlueprint),
Cube(CubeBlueprint),
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct CubeBlueprint {
pub cube_idle: IdleMode,
pub bound_checks: BoundChecks,
pub num_shared_accumulators: usize,
pub use_planes: bool,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum PlaneMergeStrategy {
Lazy,
Eager,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct PlaneReduceBlueprint {
pub plane_idle: IdleMode,
pub bound_checks: BoundChecks,
pub plane_merge_strategy: PlaneMergeStrategy,
pub plane_dim_ceil: bool,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct UnitReduceBlueprint {
pub unit_idle: IdleMode,
}