From f86b6d2613c90e9484ca19e8c05139f5cb02eb09 Mon Sep 17 00:00:00 2001 From: Sean Bowe Date: Sat, 17 Sep 2016 20:49:56 -0600 Subject: [PATCH] Multithreading improvements. --- src/protocol/multicore.rs | 15 ++++++++++++--- src/protocol/spair.rs | 6 +++++- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/protocol/multicore.rs b/src/protocol/multicore.rs index c35990b..720a78e 100644 --- a/src/protocol/multicore.rs +++ b/src/protocol/multicore.rs @@ -1,6 +1,15 @@ use bn::*; use crossbeam; +fn calculate_window_size(v: &[T], threads: usize) -> usize +{ + if threads >= v.len() { + v.len() + } else { + v.len() / threads + } +} + pub fn parallel_all< G: Group, F: Fn(&[G], &[G]) -> bool + Sync @@ -11,7 +20,7 @@ pub fn parallel_all< let f = &f; crossbeam::scope(|scope| { - let window_size = v1.len() / threads; + let window_size = calculate_window_size(v1, threads); let mut tasks = vec![]; for i in v1.chunks(window_size).zip(v2.chunks(window_size)) { tasks.push(scope.spawn(move || { @@ -34,7 +43,7 @@ pub fn parallel_two< let f = &f; crossbeam::scope(|scope| { - let window_size = v1.len() / threads; + let window_size = calculate_window_size(v1, threads); let mut j = 0; for v in v1.chunks_mut(window_size) .zip(v2.chunks_mut(window_size)) @@ -57,7 +66,7 @@ pub fn parallel< let f = &f; crossbeam::scope(|scope| { - let window_size = v.len() / threads; + let window_size = calculate_window_size(v, threads); let mut j = 0; for v in v.chunks_mut(window_size) { scope.spawn(move || { diff --git a/src/protocol/spair.rs b/src/protocol/spair.rs index ce83550..b5d5938 100644 --- a/src/protocol/spair.rs +++ b/src/protocol/spair.rs @@ -74,6 +74,8 @@ pub fn checkvec( where Group1: Pairing { parallel_all(v1, v2, |v1, v2| { + assert_eq!(v1.len(), v2.len()); + let rng = &mut ::rand::thread_rng(); let mut p = Group1::zero(); let mut q = Group1::zero(); @@ -84,7 +86,9 @@ where Group1: Pairing q = q + (*b * alpha); } - if p.is_zero() || q.is_zero() { + if p.is_zero() && q.is_zero() { + true + } else if p.is_zero() || q.is_zero() { false } else { same_power(&Spair::new(p, q).unwrap(), a)