diff --git a/src/protocol/multicore.rs b/src/protocol/multicore.rs index 2e5f891..96efe85 100644 --- a/src/protocol/multicore.rs +++ b/src/protocol/multicore.rs @@ -1,15 +1,27 @@ use bn::*; use crossbeam; -pub fn mul_all_by(v: &mut [G], c: Fr) { +pub fn parallel(v: &mut [G], f: F, threads: usize) +{ + let f = &f; + crossbeam::scope(|scope| { - let window_size = v.len() / ::THREADS; - for i in v.chunks_mut(window_size) { + let window_size = v.len() / threads; + let mut j = 0; + for v in v.chunks_mut(window_size) { scope.spawn(move || { - for i in i { - *i = *i * c; - } + f(j, v); }); + + j += window_size; } }); } + +pub fn mul_all_by(v: &mut [G], c: Fr) { + parallel(v, |_, v| { + for i in v { + *i = *i * c; + } + }, ::THREADS); +}