parallelize longest period finder
This commit is contained in:
+2
-2
@@ -3,7 +3,7 @@ mod period;
|
||||
mod tea3;
|
||||
|
||||
use lfsr::Lfsr;
|
||||
use period::{longest_period, period_bruteforce, period_floyd, period_paper};
|
||||
use period::{longest_period_parallel, period_bruteforce, period_floyd, period_paper};
|
||||
use tea3::Tea3;
|
||||
|
||||
fn main() {
|
||||
@@ -65,7 +65,7 @@ fn main() {
|
||||
// println!("\nPaper period p20: {}", period_paper(vec![0x7a, 0x02, 0x00, 0x00, 0x00]));
|
||||
// println!("\nPaper period p27: {}", period_paper(vec![0x00, 0x00, 0x00, 0x00, 0x00]));
|
||||
|
||||
let (p, seed) = longest_period();
|
||||
let (p, seed) = longest_period_parallel();
|
||||
println!("\nLongest period: {}", p);
|
||||
println!("Seed: {:02x?}", seed);
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
use std::collections::HashMap;
|
||||
use rayon::prelude::*;
|
||||
|
||||
use crate::tea3::Tea3;
|
||||
|
||||
@@ -177,3 +178,19 @@ pub fn longest_period() -> (u64, [u8; 5]) {
|
||||
|
||||
(best_period, best_seed)
|
||||
}
|
||||
|
||||
pub fn longest_period_parallel() -> (u64, [u8; 5]) {
|
||||
let limit: usize = 1usize << 40;
|
||||
|
||||
(0usize..limit)
|
||||
.into_par_iter()
|
||||
.map(|x| {
|
||||
let seed = Reg5::from_u40(x as u64);
|
||||
let p = period_h(seed);
|
||||
(p, seed.0)
|
||||
})
|
||||
.reduce(
|
||||
|| (0u64, [0u8; 5]),
|
||||
|a, b| if a.0 >= b.0 { a } else { b },
|
||||
)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user