849 Commits

Author SHA1 Message Date
b607a75fd9 Top 40 babyyy (bench 5725647) 2026-07-14 20:08:03 +02:00
d6a3386753 Speed up move generation and position updates (bench 5725647)
Co-authored-by: GPT 5.6 Sol <codex@openai.com>
2026-07-09 22:04:00 +02:00
c010a37702 Update ratings (bench 5725647) 2026-07-07 12:47:00 +02:00
d8ec13e049 Remove dead lists, add row for 1.5, format tables (bench 5725647) 2026-06-29 10:27:17 +02:00
fcdbbdbbd0 Ensure move list can hold up to 218 moves (bench 5725647) 1.5.0 2026-06-26 14:09:21 +02:00
a7b7dad514 Nonfunctional changes (bench 5725647) 2026-06-25 18:47:57 +02:00
d3b1e0f7d1 Add en passant moves to the search histories (bench 5725647)
Removes the temporary `and not move.isEnPassant()` guards that kept en
passant out of capture history, capture-history LMR, ttCapture and the
failed-capture malus. En passant now scores and updates capture history
like any other capture, with the victim looked up via captureSquare().

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 21:02:37 +02:00
5dedf549b6 Treat en passant as a capture and add captureSquare() helper (bench 5775715)
isCapture() now returns true for en passant moves; the new captureSquare()
helper disambiguates the to-be-captured square (targetSquare for normal
captures, targetSquare xor 8 for en passant). movegen and eval route the
captured-piece lookup through it, removing the bespoke ep square math and
the separate ep-removal block.

En passant is deliberately kept out of the search histories for now via
explicit `and not move.isEnPassant()` guards, so bench is unchanged.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 20:55:15 +02:00
3853ff5db2 Do not require the main thread to wait for all workers to start when running multithreaded searches (bench 5775715) 2026-06-23 19:55:31 +02:00
a882f5825b Go back to initializing NNUE state only in the main thread and copying into workers (bench 5775715) 2026-06-22 20:57:41 +02:00
a519cca795 Make pretty logs print nps in Millions or Billions if the value is large enough (bench 5775715) 2026-06-22 12:34:19 +02:00
807763e8a4 Update default king bucket scheme (bench 5775715) 2026-06-21 19:43:59 +02:00
071ff691de Fix all.txt in test suite (bench 5775715) 2026-06-21 13:16:45 +02:00
61492b6b13 Modularize UCI monolith, remove unused TUI utilities (bench 5775715) 2026-06-21 09:51:07 +02:00
6169d70ade Implement more robust handling of not-in-a-git-repo condition when grabbing version hash (bench 5775715) 2026-06-21 09:28:36 +02:00
b8e2dc93cb Add NNUE-as-policy functionality, minor documentation fix in NUMA utility (bench 5775715) 2026-06-20 22:40:18 +02:00
ca2d308bc2 Update README (bench 5775715) 2026-06-18 11:52:22 +02:00
448ca6670b Update TODOs (bench 5775715) 2026-06-18 11:18:45 +02:00
8a84481f8d Document recovered TUI analysis features (bench 5775715) 2026-06-18 11:06:21 +02:00
28f116d43c Honor score normalization setting in TUI (bench 5775715) 2026-06-18 11:02:35 +02:00
3143202625 Restore TUI game analysis (bench 5775715) 2026-06-18 11:02:31 +02:00
d27dcfd11d Fix minor issue in soft limit recalculation and ensure that search state and clock time always stay in sync with acq/rel semantics (bench 5775715) 2026-06-17 12:52:44 +02:00
dd0cde9891 Back HistoryTables and EvalState with 2MB transparent huge pages (bench 5775715)
The history tables and eval state are several megabytes of randomly-accessed
data hammered on every search node. Allocate them on 2MB huge pages to cut TLB
misses: HistoryTablesObj/EvalState storage is owned by the SearchManager via
HugePtr handles, with auto-dereferencing accessors so existing call sites keep
working unchanged.

Bench unchanged.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-16 17:44:57 +02:00
feccac52cd Prepare for 1.5 release (bench 5775715) 2026-06-16 17:31:38 +02:00
93348fd5f2 Fix release versioning and unsupported bench checks (bench 5775715) 2026-06-16 17:17:39 +02:00
230dc3b492 Fix worker pool protocol desync when a pool command follows a multithreaded search (bench 5775715)
Under multiple search threads the engine would flakily crash with either a
shifted-by-one `response == expected` AssertionDefect or a DeadThreadDefect
when a pool-mutating UCI command (ucinewgame / setoption Threads) was sent
right after a `go`. This is a longstanding race (predates 1.4.3), not a
regression from the NUMA work.

Root cause: the UCI reader thread dispatches each search to the asynchronous
search-worker thread and immediately returns to reading stdin, but the
`searching` flag was only published inside search() on the worker thread. That
left a window where the next command observed searching=false, passed its
guard, and drove the per-worker command/response channels concurrently with
the search thread's own startSearch / post-search ping barrier. Concurrent
send+recv on the same channels breaks the one-send-one-recv pairing
(manifestation B); with a Threads change it shuts down workers the barrier is
still pinging (manifestation A).

Fixes:
- Publish the `searching` flag synchronously at `go` dispatch on the UCI thread
  (new SearchManager.markSearching) so the guard is race-free.
- Make the SetOption/Set guard actually skip (continue) when searching, instead
  of printing an error and falling through to mutate the pool.
- Defensively wrap the worker Go-body search in try/except so a future throwing
  search can't silently kill a worker and desync the protocol.

Verified with the repro loops (both manifestations) over 200 runs with zero
failures; bench unchanged.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-16 16:00:30 +02:00
e804edca9e Update README section about the neural network (bench 5775715) 2026-06-16 13:35:12 +02:00
05f487c030 Make sure TT initialization runs with as many threads as possible on NUMA > 1 machines (bench 5775715) 2026-06-16 13:19:00 +02:00
1d5e2ea8fc Add NUMA aware thread-binding and TT initialization logic (bench 5775715) 2026-06-15 13:44:42 +02:00
11de523cdf Add post-build bench check in GitHub workflow (bench 5775715) 2026-06-14 18:53:48 +02:00
cc39c05566 Cleanup, remove duplicate utilities, improve abstraction of some low-level bitboard manipulation (bench 5775715) 2026-06-14 18:32:09 +02:00
925e587b6b Align non-SIMD inference with L1 quantization behavior from SIMD version (bench 5775715) 2026-06-14 15:01:37 +02:00
fd9c08c98b README fix (bench 5775715) 2026-06-13 18:32:10 +02:00
01f61fc9ad Add vnni target to README (bench 5775715) 2026-06-13 18:28:44 +02:00
52cbbd0096 Fix issues with book augmentation, improve displayed statisitcs, minor other changes (bench 5775715) 2026-06-13 17:40:12 +02:00
f6a7456fb0 Removed stub section from README (bench 5775715) 2026-06-13 12:59:37 +02:00
015c42adfb Revert merged kings cuz borked (bench 5775715) 2026-06-13 12:46:26 +02:00
05cb1bf89b Add detection of AVX2 capable processors and fall back to legacy target in native on older hardware (bench 5775715) 2026-06-13 11:27:12 +02:00
18dfa8c55c Add third party king plane merger and switch back to merged king planes (bench 5775715) 2026-06-13 11:27:09 +02:00
d2e1f28cca slightly better simd
bench: 5775715
2026-06-12 21:50:43 +02:00
d57090c28c Add missing control knobs to makefile, rescale eval (bench 5775715) 2026-06-12 20:40:21 +02:00
e05cef40bb Initial work on own multilayer net (fix transpose on load, change L1 quant behavior) (bench 6253423) 2026-06-12 20:14:07 +02:00
8a2f6458b0 Add basic integer multilayer inference (autovec+SIMD) with dual-activation support 2026-06-11 12:32:03 +02:00
f2dab29296 Use tag version for stable release builds (bench 5552934) 2026-06-10 13:08:06 +02:00
519f227c9e Skip Gitea upload for Linux tarball (bench 5552934) 2026-06-10 13:01:12 +02:00
dacb81f5ec Build dev-named prerelease artifacts (bench 5552934) 2026-06-10 12:54:09 +02:00
499322fc5d Publish release artifacts to Gitea (bench 5552934) 2026-06-10 12:29:15 +02:00
e15a8a0aac Add Linux release workflow (bench 5552934) 2026-06-10 12:14:03 +02:00
771b2b790d Fix Windows release build setup (bench 5552934) 2026-06-10 11:57:56 +02:00
12682a781e Use ld.lld in Windows workflow diagnostics (bench 5552934) 2026-06-10 11:51:28 +02:00