Stash is a UCI-compliant chess engine developed from scratch. Preferably used with a GUI like Nibbler, CuteChess, Arena, etc.
Stash supports for now all these UCI options:
-
Sets the number of cores used for searching a position (defaults to 1).
-
Sets the hash table size in MB (defaults to 16).
-
Clears the hash table.
-
Output the best N lines (principal variations) when searching. Leave at 1 for best performance.
-
Assumes a time delay of x milliseconds due to network and GUI overheads. Increase it if the engine often loses games on time. The default value of 100 ms should be sufficient for all chess GUIs.
-
Normalizes the search score so that a 100 centipawns advantage corresponds to a win rate of ~50% at move 32. Enabled by default.
-
Displays the expected probabilities of win/draw/loss per mill, alongside the search score. Only enable it if your GUI supports it.
-
If you are on a Unix-like system, simply go to the src directory from a terminal and type:
make
The Makefile normally autodetects which arch-specific options are the most suitable for the host system you're compiling on. Specific architecture optimizations may be applied by using:
make ARCH=arch_name
with
arch_name
being one of the following: x86-64, x86-64-popcnt or x86-64-bmi2. For non-x86 builds, or 32-bit x86 builds, you can useARCH=generic
instead. Note that specifying the arch manually is only required if you're building the engine for a different host, or if the Makefile fails to detect properly the host CPU.Additionally, for native binaries you can also pass
NATIVE=yes
to the Makefile to enable the usage of all available instruction sets on the host. -
Compiled binaries for Linux and Windows are available from the "releases" page of the project. You can download the binary corresponding to your operating system and architecture.
-
The latest release should always be the best. The different architecture builds are:
-
64: generic 64-bit build. Should work on all x86_64 processors.
-
x86_64: x86_64 build. The only thing specific to this binary is the usage of the
prefetch
instruction, which places RAM addresses in cache for faster access. Should work on almost all x86_64 processors (except for a few old Xeon Phis). -
x86_64-popcnt: same as previous one, but also enables use of the
popcnt
(Population Count) instruction. Should work on all K10-based AMD processors or newer, and all Intel Nehalem processors or newer. -
x86_64-bmi2: same as previous one, but also enables use of the
pext
(Parallel Bit Extract) instruction. Should work on all AMD processors with Excavator arch or newer, and all Intel processors with Haswell arch or newer. Note that you should avoid using this binary for Zen-based AMD processors which are not Zen 3 or newer, as thepext
microcode implementation will make the bmi2 binary slower than the popcnt one.
-