Rayon for threading
authorJustin Worthe <justin@worthe-it.co.za>
Tue, 15 May 2018 21:15:02 +0000 (23:15 +0200)
committerJustin Worthe <justin@worthe-it.co.za>
Tue, 15 May 2018 21:15:11 +0000 (23:15 +0200)
Cargo.toml
src/lib.rs
src/strategy/monte_carlo.rs

index 86a4b95..264b2a9 100644 (file)
@@ -9,6 +9,7 @@ serde_json = "1.0.16"
 
 rand = "0.4.2"
 time = "0.1.4"
+rayon = "1.0.1"
 
 [dev-dependencies]
 criterion = "0.2"
index 728f747..6bcfc00 100644 (file)
@@ -7,6 +7,8 @@ extern crate serde_derive;
 extern crate rand;
 extern crate time;
 
+extern crate rayon;
+
 pub mod json;
 pub mod engine;
 pub mod strategy;
index 6f0f681..b7025c5 100644 (file)
@@ -8,16 +8,19 @@ const MAX_MOVES: u16 = 400;
 
 use time::{Duration, PreciseTime};
 
+use rayon::prelude::*;
+
 pub fn choose_move(settings: &GameSettings, state: &GameState, start_time: &PreciseTime, max_time: Duration) -> Command {
     println!("Using MONTE_CARLO strategy");
     
-    let mut rng = thread_rng();
     let mut command_scores = CommandScore::init_command_scores(settings, state);
 
     loop {
-        for mut score in &mut command_scores {
-            simulate_to_endstate(score, settings, state, &mut rng);
-        }
+        command_scores.par_iter_mut()
+            .for_each(|score| {
+                let mut rng = thread_rng();
+                simulate_to_endstate(score, settings, state, &mut rng);
+            });
         if start_time.to(PreciseTime::now()) > max_time {
             break;
         }