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));