use crate::routines::{
BlueprintStrategy, cube::CubeRoutine, plane::PlaneRoutine, unit::UnitRoutine,
};
use cubecl::{features::Plane, 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>),
Cube(BlueprintStrategy<CubeRoutine>),
}
#[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)
}