use ruda_kernel::dsl as kernel_dsl;
use crate::reduce::routines::{
BlueprintStrategy, ruda::RudaRoutine, plane::PlaneRoutine, unit::UnitRoutine,
};
use ruda_kernel::dsl::ir::features::Plane;
use ruda_kernel::dsl::prelude::*;
#[derive(Debug, Clone)]
pub struct ReduceStrategy {
pub routine: RoutineStrategy,
pub vectorization: VectorizationStrategy,
}
#[derive(Debug, Clone)]
pub enum RoutineStrategy {
Unit(BlueprintStrategy<UnitRoutine>),
Plane(BlueprintStrategy<PlaneRoutine>),
Ruda(BlueprintStrategy<RudaRoutine>),
}
#[derive(Debug, Clone, Copy)]
pub struct VectorizationStrategy {
pub parallel_output_vectorization: bool,
}
pub(crate) fn support_plane<R: Runtime>(client: &ComputeClient<R>) -> bool {
client.properties().features.plane.contains(Plane::Ops)
}