Carp is a UCI-compatible didactic engine written in Rust, using a bitboard-based piece-centric approach.\ The engine is built on top of a conventional Negamax search and uses a simple NNUE evaluation.
The main goal of this project is to learn the basics of both Rust and Chess Programming.
Version | CCRL 40/15 | CCRL BLITZ | CEGT 40/4 | MCERL | IPMAN |
---|---|---|---|---|---|
3.0.1 | 3406 | 3509 | 3430 | N/a | 3301 |
2.0.0 | 3087 | 3159 | 2980 | 3117 | N/a |
1.3.0 | N/a | N/a | N/a | 2675 | N/a |
1.2.0 | N/a | N/a | N/a | 2488 | N/a |
1.1.0 | N/a | N/a | N/a | 2164 | N/a |
Carp is rigorously tested with SPRT, and is part of the SWEHosting OB instance.
The project is structured in 3 main Cargo Workspaces: Chess is the game backend used by the engine, Engine is the UCI engine and Tools is an executable with developer tools. The first two crates are designed to be dependency-less, although Syzygy Tablebase support requires interfacing with Fathom (not compiled by default).
Building Carp only requires Cargo. Carp is currently tested on Rust Stable v1.70, so that is the recommended version, although it could possibly work (without guarantees) on earlier releases.
For development, Carp should be built through Cargo with cargo run --release --package engine
.
To compile Carp for maximum performance, the use of PGO is highly recommended. Depending on the CPU,
it has shown to be up to 60 elo over a standard Cargo build. To do this, either run make native
to only
build an executable targeting the machine's specific architecture, or build all available microarchitecture
levels for the running OS through make release
.
NOTE: the PGO build requires having llvm-profdata, which should be included with LLVM or CLANG.
Carp uses a (768->1024)x2->1 perspective net trained with Bullet.
It fully relies on its own self-play data for training the network. Data can be generated with the
utilities provided in the Tools module. To build for datagen, simply run make datagen
which
also performs PGO.
As of Carp 2.0, NNUE has compltely replaced the old HCE.
None of these are strictly necessary to run the engine, but they are vital for development: