Author: Claudio M. Camacho Rating Chess Engines Diary CEDR=3126
Gargantua 2.1 what's new?
Gargantua v2.1 - Lazy SMP, Advanced Search, & 6x Performance Leap
This release marks a massive architectural leap in search depth and evaluation speed. By introducing Stockfish-style multithreading and overhauling the search heuristics, the engine now achieves over 3.6M+ Nodes Per Second (NPS)—a ~6x performance increase—and effortlessly scales to Depth 21+ in under 10 seconds.
🚀 Engine Architecture & Multithreading
Stockfish-Style Lazy SMP: Completely refactored the engine for multithreading, implementing ThreadPool, Thread, and MainThread classes for scalable, concurrent searches.
Lockless Transposition Table (TT): Replaced global TT increment counters with a lockless TT::hashfull() sampling method, completely eliminating false-sharing cache bottlenecks.
Modernization & Portability: Upgraded thread identification from POSIX pthread_self() to C++20 std::this_thread::get_id() and converted the global timeout flag to std::atomic<bool>.
🧠 Search & Evaluation Enhancements
Logarithmic Late Move Reductions (LMR): Swapped flat depth reduction for an aggressive, precomputed Logarithmic LMR Table.
Singular Extensions & History Gravity: The engine now extends search depth by 1 ply upon discovering singular moves via zero-window searches. Additionally, History Gravity now dynamically applies a depth-squared bonus/penalty to prioritize better history moves across branches.
Countermove Heuristic: Tracks refutations to quiet moves and heavily prioritizes them in future subtrees.
Progressive Aspiration Windows: Replaced the full-width fail fallback with progressive widening, massively saving on node recalculation.
Aggressive Quiescence Pruning: Enabled Static Exchange Evaluation (SEE) inside Quiescence Search to aggressively prune capture sequences that result in material loss.
🐛 Bug Fixes & Stability
Resolved critical memory corruption and double-undo bugs in the NNUE state during multi-threaded searches.
Fixed Out-Of-Memory (OOM) crashes and thread synchronization false positives that occurred during concurrent regression match testing.
Cleaned up Universal Chess Interface (UCI) output so info and bestmove are strictly limited to the main thread.
Fixed the UCI nodes stat to correctly aggregate the total searched nodes across all threads.
Gargantua 1.0 vs other engines:
| Hiarcs 15.5 | 9.5/51 | -32 | 51 games |
| Journeyman 2.1 | 11.5/25 | -2 | 25 games |
| FoxSEE 8.2 | 18/19 | +17 | 19 games |
| Smallbrain 4.0 | 11.5/18 | +5 | 18 games |
| Critter 1.6a | 7.5/14 | +1 | 14 games |
| Jackychess 0.12.0 | 12/13 | +11 | 13 games |
| Protej 0.6.3 | 11/13 | +9 | 13 games |
| Velvet 4.0.1 | 1.5/12 | -9 | 12 games |
| Odonata 0.6.2 | 10/11 | +9 | 11 games |
| Devel 4.0.2.3 | 9/10 | +8 | 10 games |
| Beef 0.3.6 | 7/10 | +4 | 10 games |
| Fritz 17 | 3/10 | -4 | 10 games |
| CorChess 210622 | 1/10 | -8 | 10 games |
| Cdrill 2000 | 8/8 | +8 | 8 games |
| ChessKISS 1.8 | 8/8 | +8 | 8 games |
| Blunder 8.0.0 | 7.5/8 | +7 | 8 games |
| Fridolin 4.00 JA | 7.5/8 | +7 | 8 games |
| Rhetoric 1.4.3 | 7/8 | +6 | 8 games |
| Euwe 2.1.0 JA | 7/8 | +6 | 8 games |
| Ice4 6 JA | 5.5/8 | +3 | 8 games |
| Inanis 1.6.0 | 5/8 | +2 | 8 games |

Comments
Post a Comment