vyre_reference/dual_impls/workgroup/reduce/
reference.rs1use 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}