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::{
|
use crate::{
|
||||||
agent::Agent,
|
agent::Agent,
|
||||||
complexagent::ComplexAgent,
|
complexagent::ComplexAgent,
|
||||||
@ -5,7 +7,9 @@ use crate::{
|
|||||||
logic::{ChildrenEvalMethod, FutureMoveConfig},
|
logic::{ChildrenEvalMethod, FutureMoveConfig},
|
||||||
repr::{Board, Piece, Winner},
|
repr::{Board, Piece, Winner},
|
||||||
};
|
};
|
||||||
use indicatif::{ParallelProgressIterator, ProgressStyle, TermLike};
|
use indicatif::{
|
||||||
|
ParallelProgressIterator, ProgressBar, ProgressDrawTarget, ProgressStyle, TermLike,
|
||||||
|
};
|
||||||
use rand::seq::SliceRandom;
|
use rand::seq::SliceRandom;
|
||||||
use rayon::iter::{IntoParallelIterator, ParallelIterator};
|
use rayon::iter::{IntoParallelIterator, ParallelIterator};
|
||||||
use skillratings::{
|
use skillratings::{
|
||||||
@ -25,7 +29,7 @@ pub fn run() {
|
|||||||
children_eval_method: ChildrenEvalMethod::Average,
|
children_eval_method: ChildrenEvalMethod::Average,
|
||||||
};
|
};
|
||||||
|
|
||||||
let configs = (6..=6)
|
let configs = (6..=7)
|
||||||
.map(move |d| FutureMoveConfig {
|
.map(move |d| FutureMoveConfig {
|
||||||
max_depth: d,
|
max_depth: d,
|
||||||
..FMV_BASE
|
..FMV_BASE
|
||||||
@ -139,12 +143,37 @@ impl PlayerArena {
|
|||||||
|
|
||||||
let (sender, receiver) = crossbeam_channel::unbounded();
|
let (sender, receiver) = crossbeam_channel::unbounded();
|
||||||
|
|
||||||
|
let term = console::Term::stdout();
|
||||||
|
|
||||||
// Spawn parallel processing in a dedicated thread
|
// Spawn parallel processing in a dedicated thread
|
||||||
let processing_thread = {
|
let processing_thread = {
|
||||||
let sender = sender.clone();
|
let sender = sender.clone();
|
||||||
|
let term = term.clone();
|
||||||
|
|
||||||
std::thread::spawn(move || {
|
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
|
created_pairs
|
||||||
.into_par_iter()
|
.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(
|
.progress_with_style(
|
||||||
ProgressStyle::with_template(
|
ProgressStyle::with_template(
|
||||||
"[{elapsed_precise}] {pos:>7}/{len:7} ETA: {eta}",
|
"[{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
|
// Immediately drop our copy of the sender so the channel closes properly
|
||||||
drop(sender);
|
drop(sender);
|
||||||
|
|
||||||
let term = console::Term::stdout();
|
|
||||||
// Process results on main thread as they arrive
|
// Process results on main thread as they arrive
|
||||||
let mut received_num = 0;
|
let mut received_num = 0;
|
||||||
while let Ok((i, j, o)) = receiver.recv() {
|
while let Ok((i, j, o)) = receiver.recv() {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user