Function tange::deferred::tree_reduce
source · pub fn tree_reduce<A: Any + Send + Sync + Clone, F: 'static + Sync + Send + Clone + Fn(&A, &A) -> A>(
defs: &[Deferred<A>],
f: F
) -> Option<Deferred<A>>
Expand description
Often times, we want to combine a set of Deferred objects into a single Deferred.
tree_reduce
combines pairs of Deferred recursively using f
, building a dependency
tree which attempts to maximize parallelism.
use tange::deferred::{Deferred, tree_reduce};
use tange::scheduler::LeveledScheduler;
let vec: Vec<_> = (0usize..10)
.map(|v| Deferred::lift(v, None)).collect();
let out = tree_reduce(&vec, |left, right| left + right).unwrap();
let expected = (0usize..10).fold(0, |acc, x| acc + x);
assert_eq!(out.run(&LeveledScheduler), Some(expected));