elo: multithreading improvements
This commit is contained in:
parent
b8acc03df1
commit
71a3d077e6
34
src/elo.rs
34
src/elo.rs
@ -1,3 +1,5 @@
|
||||
use std::num::NonZero;
|
||||
|
||||
use crate::{
|
||||
agent::Agent,
|
||||
complexagent::ComplexAgent,
|
||||
@ -5,7 +7,9 @@ use crate::{
|
||||
logic::{ChildrenEvalMethod, FutureMoveConfig},
|
||||
repr::{Board, Piece, Winner},
|
||||
};
|
||||
use indicatif::{ParallelProgressIterator, ProgressStyle, TermLike};
|
||||
use indicatif::{
|
||||
ParallelProgressIterator, ProgressBar, ProgressDrawTarget, ProgressStyle, TermLike,
|
||||
};
|
||||
use rand::seq::SliceRandom;
|
||||
use rayon::iter::{IntoParallelIterator, ParallelIterator};
|
||||
use skillratings::{
|
||||
@ -25,7 +29,7 @@ pub fn run() {
|
||||
children_eval_method: ChildrenEvalMethod::Average,
|
||||
};
|
||||
|
||||
let configs = (6..=6)
|
||||
let configs = (6..=7)
|
||||
.map(move |d| FutureMoveConfig {
|
||||
max_depth: d,
|
||||
..FMV_BASE
|
||||
@ -139,12 +143,37 @@ impl PlayerArena {
|
||||
|
||||
let (sender, receiver) = crossbeam_channel::unbounded();
|
||||
|
||||
let term = console::Term::stdout();
|
||||
|
||||
// Spawn parallel processing in a dedicated thread
|
||||
let processing_thread = {
|
||||
let sender = sender.clone();
|
||||
let term = term.clone();
|
||||
|
||||
std::thread::spawn(move || {
|
||||
rayon::ThreadPoolBuilder::new()
|
||||
.num_threads(
|
||||
(std::thread::available_parallelism()
|
||||
.map(NonZero::get)
|
||||
.expect("unable to get number of threads")
|
||||
/ 3)
|
||||
* 2,
|
||||
)
|
||||
.build_global()
|
||||
.unwrap();
|
||||
|
||||
created_pairs
|
||||
.into_par_iter()
|
||||
.progress_with({
|
||||
let a = ProgressBar::new(num as u64).with_style(
|
||||
ProgressStyle::with_template(
|
||||
"[{elapsed_precise}] {pos:>7}/{len:7} ETA: {eta}",
|
||||
)
|
||||
.expect("invalid ProgressStyle"),
|
||||
);
|
||||
a.set_draw_target(ProgressDrawTarget::term(term, 5));
|
||||
a
|
||||
})
|
||||
.progress_with_style(
|
||||
ProgressStyle::with_template(
|
||||
"[{elapsed_precise}] {pos:>7}/{len:7} ETA: {eta}",
|
||||
@ -161,7 +190,6 @@ impl PlayerArena {
|
||||
// Immediately drop our copy of the sender so the channel closes properly
|
||||
drop(sender);
|
||||
|
||||
let term = console::Term::stdout();
|
||||
// Process results on main thread as they arrive
|
||||
let mut received_num = 0;
|
||||
while let Ok((i, j, o)) = receiver.recv() {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user