Basilisk, a UCI chess engine written in C++23.
Estimated strength: ~2400 ELO (single-thread calibration against Stockfish; FIDE Master / International Master level).
Author: Miloslav Macůrek
Basilisk 1.9.1 what's new?
Basilisk 1.9.1 is a patch release on 1.9.0 focused on speed, code health, and infrastructure. The search algorithm is bit-identical to 1.9.0 (bench 11941440, same node counts on every position); the only strength change is a modest speed gain.
Highlights
~+8.7 Elo from pure speed. A profile-guided optimization pass lifted search throughput +4.34% NPS with every change bench-identical (identical moves). A batch SPRT against the pre-pass build confirmed +8.69 ± 6.63 Elo at 3+0.03 (95% CI excludes zero). The wins: continuation-history hoisting in move scoring, a compile-time-specialized mobility loop, slider-attack reuse in eval, and SEE-verdict memoization.
~16× faster startup on the non-PEXT builds (generic / AVX2 / aarch64): magic bitboards are now precomputed and baked in instead of re-derived at every launch — 603 ms → 38 ms.
Codebase cleanup and hardening (verified strength-neutral, +0.17 ± 4.41 Elo over 6,000 games): a C++23 modernization pass, clang-tidy at zero findings under a checked-in policy, an internal make/unmake refactor, 16-bit move encoding, growable game history, and search telemetry counters.
Fixed
The ASan/UBSan test gate was unbuildable as shipped; the full suite now builds and passes under sanitizers and runs in CI.
Two search parameters were mis-advertised over UCI (stale default, one knob unregistered and untunable); all 46 search parameters are now generated from a single definition.
setoption Hash mid-game briefly allocated old and new transposition tables at once (transient ~3× memory spike).
POSIX builds no longer die on SIGPIPE when a GUI closes the output pipe.
A GCC-builtin call made real-MSVC builds impossible; replaced with standard C++23 <bit> (identical codegen).
Testing & CI
CI now builds and runs the full test suite on Linux, Windows, and macOS, plus a sanitizer job, on every master push.
A cross-platform bench-agreement check asserts all platforms produce the exact same search node count — and the release pipeline applies the same check across all published binaries.
New tests: engine-level malformed-input survival, strict legality sweeps over every packaged position suite, transposition-table byte-budget contracts, and magic-bitboard coverage.
Comments
Post a Comment