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/Justfile b/Justfile index 600a7a36..be09016f 100644 --- a/Justfile +++ b/Justfile @@ -93,9 +93,15 @@ 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('Run criterion benchmarks')] +[group('chess')] +[group('performance')] +bench: + cargo bench -p chess [doc('Generate magic numbers use for magic bitboards')] [group('chess')] 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); 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 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"