From 4c67255a364d126ea21530aeacb5a612d4934a20 Mon Sep 17 00:00:00 2001 From: Paul Tsouchlos Date: Fri, 20 Mar 2026 12:49:32 -0400 Subject: [PATCH 1/5] chore: improve benchmark setup for chess crate Split benchmarks into separate modules and run them through one central file. bench: 728983 --- chess/Cargo.toml | 2 +- chess/benches/benchmarks.rs | 10 ++++++++++ chess/benches/move_gen.rs | 13 +++++++++++++ chess/benches/sliding_piece_moves.rs | 7 ++----- 4 files changed, 26 insertions(+), 6 deletions(-) create mode 100644 chess/benches/benchmarks.rs create mode 100644 chess/benches/move_gen.rs diff --git a/chess/Cargo.toml b/chess/Cargo.toml index 6d451173..31ae88ac 100644 --- a/chess/Cargo.toml +++ b/chess/Cargo.toml @@ -18,5 +18,5 @@ thiserror = { workspace = true } criterion = { workspace = true, features = ["html_reports"] } [[bench]] -name = "sliding_piece_moves" +name = "benchmarks" harness = false diff --git a/chess/benches/benchmarks.rs b/chess/benches/benchmarks.rs new file mode 100644 index 00000000..c1080e24 --- /dev/null +++ b/chess/benches/benchmarks.rs @@ -0,0 +1,10 @@ +use criterion::{criterion_group, criterion_main}; + +use crate::{move_gen::move_gen_benchmark, sliding_piece_moves::sliding_piece_benchmark}; + +mod move_gen; +mod sliding_piece_moves; + +criterion_group!(attacks, sliding_piece_benchmark); +criterion_group!(move_gen, move_gen_benchmark); +criterion_main!(attacks, move_gen); diff --git a/chess/benches/move_gen.rs b/chess/benches/move_gen.rs new file mode 100644 index 00000000..8641ecb7 --- /dev/null +++ b/chess/benches/move_gen.rs @@ -0,0 +1,13 @@ +use chess::{board::Board, move_generation}; +use criterion::Criterion; + +pub fn move_gen_benchmark(c: &mut Criterion) { + let board = Board::from_fen("R6R/3Q4/1Q4Q1/4Q3/2Q4Q/Q4Q2/pp1Q4/kBNN1KB1 w - - 0 1") + .expect("Invalid FEN"); + + c.bench_function("move-gen", |b| { + b.iter(|| { + let _moves = move_generation::generate_legal_moves(&board, chess::moves::MoveType::All); + }); + }); +} diff --git a/chess/benches/sliding_piece_moves.rs b/chess/benches/sliding_piece_moves.rs index 2977d398..b3f3b63f 100644 --- a/chess/benches/sliding_piece_moves.rs +++ b/chess/benches/sliding_piece_moves.rs @@ -1,14 +1,11 @@ use chess::{attacks, bitboard_helpers::next_bit, board::Board, pieces::Piece, side::Side}; -use criterion::{Criterion, criterion_group, criterion_main}; +use criterion::Criterion; pub fn sliding_piece_benchmark(c: &mut Criterion) { let board = Board::from_fen("R6R/3Q4/1Q4Q1/4Q3/2Q4Q/Q4Q2/pp1Q4/kBNN1KB1 w - - 0 1").unwrap(); let mut queen_bb = *board.piece_bitboard(Piece::Queen, Side::White); let next_queen = next_bit(&mut queen_bb); - c.bench_function("test", |b| { + c.bench_function("queen attacks", |b| { b.iter(|| attacks::queen(next_queen as u8, board.all_pieces())) }); } - -criterion_group!(benches, sliding_piece_benchmark); -criterion_main!(benches); From 888ae73cc493fe04a8843f517324d2aea820bd7a Mon Sep 17 00:00:00 2001 From: Paul Tsouchlos Date: Fri, 20 Mar 2026 12:49:52 -0400 Subject: [PATCH 2/5] chore: add bench epd data from Disservin's chess lib bench: 728983 --- data/disservin_bench.epd | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 data/disservin_bench.epd diff --git a/data/disservin_bench.epd b/data/disservin_bench.epd new file mode 100644 index 00000000..19022d5c --- /dev/null +++ b/data/disservin_bench.epd @@ -0,0 +1,6 @@ +rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1 ;D7 3195901860 +r3k2r/p1ppqpb1/bn2pnp1/3PN3/1p2P3/2N2Q1p/PPPBBPPP/R3K2R w KQkq - ;D5 193690690 +8/2p5/3p4/KP5r/1R3p1k/8/4P1P1/8 w - - ;D7 178633661 +r3k2r/Pppp1ppp/1b3nbN/nP6/BBP1P3/q4N2/Pp1P2PP/R2Q1RK1 w kq - 0 1 ;D6 706045033 +rnbq1k1r/pp1Pbppp/2p5/8/2B5/8/PPP1NnPP/RNBQK2R w KQ - 1 8 ;D5 89941194 +r4rk1/1pp1qppp/p1np1n2/2b1p1B1/2B1P1b1/P1NP1N2/1PP1QPPP/R4RK1 w - - 0 1 ;D5 164075551 From 4318f0ec3cc048b4fea54910bbc8f3c7706e24b1 Mon Sep 17 00:00:00 2001 From: Paul Tsouchlos Date: Fri, 20 Mar 2026 12:50:52 -0400 Subject: [PATCH 3/5] chore: increment engine/cli version to 4.0.0 This prepares for the future release but also helps out engine testers. It seems some testers are pulling from main to run some basic tournaments with the engine comparing to other engines and the 3.0.0 release. Incrementing the version now should help with any future testing. bench: 728983 --- Cargo.lock | 4 ++-- engine-cli/Cargo.toml | 2 +- engine/Cargo.toml | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 16951e94..eee5a4bc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -126,7 +126,7 @@ checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" [[package]] name = "byte-knight" -version = "3.0.0" +version = "4.0.0" dependencies = [ "chess", "clap", @@ -488,7 +488,7 @@ checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" [[package]] name = "engine" -version = "3.0.0" +version = "4.0.0" dependencies = [ "anyhow", "arrayvec", diff --git a/engine-cli/Cargo.toml b/engine-cli/Cargo.toml index d26fcccf..de57728a 100644 --- a/engine-cli/Cargo.toml +++ b/engine-cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "byte-knight" -version = "3.0.0" +version = "4.0.0" edition = { workspace = true } authors = { workspace = true } license = { workspace = true } diff --git a/engine/Cargo.toml b/engine/Cargo.toml index cc910350..edbc64cc 100644 --- a/engine/Cargo.toml +++ b/engine/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "engine" -version = "3.0.0" +version = "4.0.0" edition = "2024" From 44fc3253b2237d46439643f899d639dd5de2f54d Mon Sep 17 00:00:00 2001 From: Paul Tsouchlos Date: Fri, 20 Mar 2026 12:51:17 -0400 Subject: [PATCH 4/5] chore: improve perft-bench just command bench: 728983 --- Justfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Justfile b/Justfile index 600a7a36..b82d00a5 100644 --- a/Justfile +++ b/Justfile @@ -93,9 +93,9 @@ perft-epd: (build-target-release "byte-knight") [doc('Run perft benchmark over the EPD test suite')] [group('chess')] [group('performance')] -perft-bench: (build-target-release "perft-bench") +perft-bench file='data/standard.epd': (build-target-release "perft-bench") echo "Running perft benchmark..." - target/release/perft-bench -e data/standard.epd + target/release/perft-bench -e {{ file }} [doc('Generate magic numbers use for magic bitboards')] [group('chess')] From 302ee437dd16746eda6524a2746dd20d7ce2984d Mon Sep 17 00:00:00 2001 From: Paul Tsouchlos Date: Fri, 20 Mar 2026 12:51:26 -0400 Subject: [PATCH 5/5] chore: add bench command to Justfile bench: 728983 --- Justfile | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Justfile b/Justfile index b82d00a5..be09016f 100644 --- a/Justfile +++ b/Justfile @@ -97,6 +97,12 @@ perft-bench file='data/standard.epd': (build-target-release "perft-bench") echo "Running perft benchmark..." target/release/perft-bench -e {{ file }} +[doc('Run criterion benchmarks')] +[group('chess')] +[group('performance')] +bench: + cargo bench -p chess + [doc('Generate magic numbers use for magic bitboards')] [group('chess')] magics: