Multithreading improvements.

This commit is contained in:
Sean Bowe 2016-09-17 20:49:56 -06:00
parent f65e36a684
commit f86b6d2613
No known key found for this signature in database
GPG Key ID: 95684257D8F8B031
2 changed files with 17 additions and 4 deletions

View File

@ -1,6 +1,15 @@
use bn::*;
use crossbeam;
fn calculate_window_size<T>(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 || {

View File

@ -74,6 +74,8 @@ pub fn checkvec<Group1: Group, Group2: Group>(
where Group1: Pairing<Group2>
{
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<Group2>
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)