elo: multithreading improvements

This commit is contained in:
Simon Gardling 2025-03-05 23:11:06 -05:00
parent b8acc03df1
commit 71a3d077e6
Signed by: titaniumtown
GPG Key ID: 9AB28AC10ECE533D

View File

@ -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() {