• 1.5.0 fcdbbdbbd0

    nocturn9x released this 2026-06-27 16:01:35 +02:00 | 4 commits to master since this release

    More layers!

    Ahoy! As it was foretold by the prophecy, I come to you today with a new major release of Heimdall, featuring a multi-layer NNUE for much-improved evaluation quality. Exciting!

    What? You're asking me why I am releasing 1.5 so close to the release of 1.4.3? What are you talking about? There is no Heimdall 1.4.3, and any references or mentions to it are pure fiction. Seriously. Stop talking about it. (Seriously. You don't want to upset the Elo gods, do you?)

    Anyway, here follows a changelog

    What changed

    • Added a (shamelessly vibecoded) terminal UI with analysis, play/setup/replay flows, board rendering, eval/move arrows, user arrows, mate finding, annotations, PGN importing/exporting, and more; see here for details
    • Made UCI move parsing reject illegal moves more reliably
    • Improved command parsing so valid position and go commands embedded in otherwise malformed input can still be handled per the UCI spec
    • Switched to the first multilayer network in Heimdall's history, gramr
    • Added a new vnni target for improved inference speed on AVX512 processors that support it (no AVX2-VNNI, sorry Intel people)
    • Added Transparent Huge Pages support for aligned memory where available (detected at build time, not runtime)
    • Implemented a simplified ProbCut
    • Implemented fractional LMR and made the LMR base table tunable
    • Added continuation correction history and 2-ply continuation correction history
    • Tuned all search parameters
    • Fixed evaluation clamping and mate-score handling issues
    • Fixed the long-standing incorrect definition of improving
    • Tightened singular-extension and futility-pruning margins
    • Ensured NMP does not return false mates
    • Reduced false sharing and contention by changing how search parameters and worker state are copied/aligned
    • Used relaxed ordering for atomic operations where appropriate
    • Moved more objects to managed references and aligned more search-manager fields
    • Compressed moves into 16 bits
    • Heimdall is now NUMA-aware! On Linux machines with more than one processor (if configured with more than one thread), Heimdall will attempt to bind the transposition table and search threads in a way that maximizes performance and prevents needless back-and-forth between the different memory controllers. Should be significant at TCEC/CCC conditions
    • Reduced the time it takes for many-thread searches to start. Relevant at very high thread counts when low on time
    • En Passant moves are now considered as captures across search and movegen rather than being special-cased
    • IDK, probably forgot a bunch of stuff, but who ever reads changelogs anyway?

    Strength

    The keyword for this release is definitely scaling. That fat ass network surely seems to at least be worth the weight! The 8moves tests are benefitting 1.4.2 as well so the scaling is less pronounced, but I'm confident it's still there

    UHO_Lichess_4852_v1.epd

    STC:

    Elo   | 82.77 +- 9.57 (95%)
    Conf  | 8.0+0.08s Threads=1 Hash=16MB
    Games | N: 2010 W: 800 L: 330 D: 880
    Penta | [13, 106, 365, 440, 81]
    

    https://chess.n9x.co/test/7152/

    LTC:

    Elo   | 97.81 +- 8.43 (95%)
    Conf  | 40.0+0.40s Threads=1 Hash=64MB
    Games | N: 2016 W: 832 L: 279 D: 905
    Penta | [2, 76, 352, 523, 55]
    

    https://chess.n9x.co/test/7154/

    8moves_v3.epd

    STC:

    Elo   | 80.66 +- 9.06 (95%)
    Conf  | 8.0+0.08s Threads=1 Hash=16MB
    Games | N: 2030 W: 644 L: 181 D: 1205
    Penta | [9, 90, 425, 411, 80]
    

    https://chess.n9x.co/test/7156/

    LTC:

    Elo   | 71.80 +- 7.34 (95%)
    Conf  | 40.0+0.40s Threads=1 Hash=64MB
    Games | N: 2012 W: 491 L: 81 D: 1440
    Penta | [2, 47, 535, 383, 39]
    

    https://chess.n9x.co/test/7155/

    Downloads