Skip to main content

vyre_reference/dual_impls/workgroup/reduce/
reference.rs

1use crate::{dual_impls::common, workgroup::Memory};
2use vyre_primitives::Reduce;
3
4impl common::ReferenceEvaluator for Reduce {
5    fn evaluate(&self, inputs: &[Memory]) -> Result<Memory, common::EvalError> {
6        let words = common::u32_words(common::one_input(inputs, "reduce")?, "reduce")?;
7        let Some((&first, tail)) = words.split_first() else {
8            return Ok(common::scalar(0));
9        };
10        let mut value = first;
11        for next in tail.iter().copied() {
12            value = common::combine(self.combine, value, next)?;
13        }
14        Ok(common::scalar(value))
15    }
16}