Fast Chess is a command-line tool designed for running engine vs. engine matches in chess. It provides a robust platform for organizing and executing chess tournaments, enabling users to configure time controls, manage concurrent matches, and analyze results efficiently.
Key Features:
Concurrency Handling: Supports high-concurrency matches with up to 250 threads for optimal performance.
Time Control Configuration: Allows precise setup of time limits, including short time controls (e.g., 0.2+0.002s).
Enhanced Logging: Includes detailed logging capabilities, with options to track nodes, seldepth, nps, hashfull, tbhits, and time left.
UCI Compliance Checker: Built-in tool to verify if engines adhere to the UCI protocol.
Quick Match Option: Enables swift initiation of matches between two engines using a specified book.
Audience & Benefit:
Ideal for chess engine developers, researchers, and enthusiasts seeking to test and compare chess engines. Fast Chess offers tangible benefits such as efficient tournament organization, accurate result tracking, and compliance verification, making it an essential tool for those involved in competitive chess engine development.
The software can be installed via winget, ensuring seamless integration into your workflow.
README
Fastchess
Fastchess is a versatile command-line tool designed for running chess engine
tournaments.
Written primarily in C++17, it utilizes doctest as its testing
framework.
With Fastchess, you can effortlessly orchestrate chess tournaments, configure
time controls, and execute matches concurrently for optimal time efficiency.
Extensively tested for high concurrency (with up to 250 threads) and
short time controls (0.2+0.002s), it exhibits minimal timeout issues, with only
10 matches out of 20,000 experiencing timeouts.
What's New
Logging Changes: Logs no longer include the engine output by default.
You can enable this feature by adding engine=true to
the log option.
UCI Compliance Checker: Fastchess now offers a built-in UCI compliance checker,
allowing you to verify that engines adhere to the UCI protocol.
To use this feature, simply run the following command:
./fastchess --compliance ENGINE_PATH [ENGINE_ARGS]
Enhanced Cutechess Output: The Cutechess output support has been refined to
enhance compatibility with other tools. Simply switch the -output option to
cutechess to enable it.
Extended PGN Data: You can now track nodes, seldepth, nps (nodes per
second), hashfull, tbhits, and time left in the PGN output. Refer to the -pgnout
option for detailed information.
Quick Match Option: We've introduced a -quick option for running quick
matches between two engines with a specified book. Specify
-quick cmd=ENGINE1 cmd=ENGINE2 book=BOOK to swiftly initiate a match.
GZIP Compression for logs: The logs can now be compressed using GZIP to
reduce disk space usage. You can enable this feature adding ZLIB=true to
the make command and the enabling the compress=true option for the log.
Compiling with ZLIB=true will include gzstream a wrapper for zlib from Deepak Bandyopadhyay and Lutz Kettner, which is licensed under LGPL.
Quick start
Building from source
Building Fastchess from source is straightforward. Just follow these steps:
Clone the repository git clone https://github.com/Disservin/fastchess.git
Navigate to the Fastchess directory cd fastchess
Build the executable make -j for GCC and make -j CXX=clang++ for Clang (requires GCC >= 7.3.0 or Clang >= 8.0.0).
The executable will be located in the root directory.
If you are on Linux, you can run make install to install the binary on your system.
By default, the installation prefix is set to /usr/local. You can change this location by specifying the PREFIX during installation. The binary will be installed in $(PREFIX)/bin, and the man page will be installed in $(PREFIX)/share/man/man1.
make install PREFIX=/custom/path
This will install the binary in /custom/path/bin and the man page in /custom/path/share/man/man1. If PREFIX is not specified, it defaults to /usr/local.
Download the latest release
Prefer a pre-compiled version?
Download the latest release from our release page.
Current dev versions are available as artifacts from the CI.
Note: It is highly encouraged to use an opening book.
Command line options
See man.md for a detailed description of all command line options.
Contributing
We welcome contributions to fastchess! Please ensure that any changes you make
are beneficial to the development and pass the CI tests.
The code follows the Google style and is formatted with clang-format. When
creating pull requests, please format your code accordingly.
To contribute, you'll need a recent GCC compiler that supports C++17 and the
ability to run the Makefile. You can locally test your changes by running
make -j tests, followed by executing the ./fastchess-tests executable to
verify your changes pass the tests.
You can format the code with clang-format by running make format.
After making changes to the man file, you need to run make update-man.
Maintainers & contributors
The following people have push access to the repository: