a work-in-progress UCI chess and chess960 engine, with NNUE evaluation trained from zero knowledge starting with random weights
this project is a continuation of my HCE engine Polaris
Version | CCRL 40/15 | CCRL Blitz | CCRL 40/2 FRC | CEGT 40/4 | MCERL |
---|---|---|---|---|---|
5.0.0 | - | - | - | - | - |
4.1.0 | 3484 | - | 3802 | - | - |
4.0.0 | 3476 | 3566 | 3775 | 3440 | 3542 |
3.0.0 | 3408 | 3491 | 3691 | - | 3495 |
2.0.0 | 3399 | 3481 | 3671 | 3339 | 3482 |
1.0.0 | 3318 | 3374 | 3540 | 3235 | 3346 |
bmi2
build, otherwise fancy black magic
pext
/pdep
for rookspext
for bishopsName | Type | Default value | Valid values | Description |
---|---|---|---|---|
Hash |
integer | 64 | [1, 131072] | Memory allocated to the transposition table (in MB). |
Clear Hash |
button | N/A | N/A | Clears the transposition table. |
Threads |
integer | 1 | [1, 2048] | Number of threads used to search. |
UCI_Chess960 |
check | false |
false , true |
Whether Stormphrax plays Chess960 instead of standard chess. |
UCI_ShowWDL |
check | true |
false , true |
Whether Stormphrax displays predicted win/draw/loss probabilities in UCI output. |
ShowCurrMove |
check | false |
false , true |
Whether Stormphrax starts printing the move currently being searched after a short delay. |
Move Overhead |
integer | 10 | [0, 50000] | Amount of time Stormphrax assumes to be lost to overhead when making a move (in ms). |
EnableWeirdTCs |
check | false |
false , true |
Whether unusual time controls (movestogo != 0, or increment = 0) are enabled. Enabling this option means you recognise that Stormphrax is neither designed for nor tested with these TCs, and is likely to perform worse than under X+Y. |
SyzygyPath |
string | <empty> |
any path, or <empty> |
Location of Syzygy tablebases to probe during search. |
SyzygyProbeDepth |
spin | 1 | [1, 255] | Minimum depth to probe Syzygy tablebases at. |
SyzygyProbeLimit |
spin | 7 | [0, 7] | Maximum number of pieces on the board to probe Syzygy tablebases with. |
EvalFile |
string | <internal> |
any path, or <internal> |
NNUE file to use for evaluation. |
vnni512
: requires BMI2, AVX-512 and VNNI (Zen 4/Cascade Lake-SP/Rocket Lake and up)
avx512
: requires BMI2 and AVX-512 (Skylake-X, Cannon Lake)
avx2-bmi2
: requires BMI2 and AVX2 and assumes fast pext
and pdep
(i.e. no Bulldozer, Piledriver, Steamroller, Excavator, Zen 1, Zen+ or Zen 2)
avx2
: requires BMI and AVX2 - primarily useful for pre-Zen 3 AMD CPUs back to Excavator
sse41-popcnt
: needs SSE 4.1 and popcnt
- for older x64 CPUs
If in doubt, compare the avx2-bmi2
and avx2
binaries and pick the one that's faster. BMI2 will always be faster on Intel CPUs.
Alternatively, build the makefile target native
for a binary tuned for your specific CPU (see below)
avx2
build even though your CPU supports BMI2. These CPUs implement the BMI2 instructions pext
and pdep
in microcode, which makes them unusably slow for Stormphrax's purposes.Requires Make and a competent C++20 compiler that supports LTO. GCC is not currently supported, so the usual compiler is Clang. MSVC explicitly does not work.
> make <BUILD> CXX=<COMPILER>
<COMPILER>
with your preferred compiler - for example, clang++
or icpx
clang++
<BUILD>
with the binary you wish to build - native
/vnni512
/avx512
/avx2-bmi2
/avx2
/sse41-popcnt
native
COMMIT_HASH=on
By default, the makefile builds binaries with profile-guided optimisation (PGO). To disable this, pass PGO=off
. When using Clang with PGO enabled, llvm-profdata
must be in your PATH.
Stormphrax uses Fathom for tablebase probing, licensed under the MIT license, and a slightly modified version of incbin for embedding neural network files, under the Unlicense.
Stormphrax is tested on this OpenBench instance - thanks to all the people there, SP would be much weaker without your support :3
In no particular order, these engines have been notable sources of ideas or inspiration:
Stormphrax's current networks are trained with bullet. Previous networks were trained with Marlinflow.
The name "Stormphrax" is a reference to the excellent Edge Chronicles :)