Skip to content

Let a depth under way run past the share to a hard limit - #399

Merged
aywrite merged 1 commit into
masterfrom
claude/candidate-6-root-effort-2q00jf
Oct 12, 2026
Merged

aywrite merged 1 commit into
masterfrom
claude/candidate-6-root-effort-2q00jf

Conversation

@aywrite

@aywrite aywrite commented Oct 12, 2026

Copy link
Copy Markdown
Owner

A share of a game clock was also the deadline, so a depth still running at the share was cut there. Now a share carries a hard limit beside it: three shares, at most a quarter of the clock, less the overhead, and never under the share. The soft line still reads the share, so no depth is begun on the extra time. To keep the time spent level the share is 81% of what it was (taken before the overhead), solved by replaying 100 games at a node budget.

A move time and an increment with no clock are unchanged.

Results against master d82638a:

  • 10+0.1: sprt [0, 10] passed at LLR 4.93, +32 ±14 over 1,000 games (a stopped estimate, so it leans high). 1.009 of master's time, end clock 115 ms lower, no losses on time.
  • 30+0.3: +13 ±14 over 1,000 games (95% -1 to +27), 1.001 of the time, no losses on time.

The bench is unchanged at 11088536.

🤖 Generated with Claude Code

https://claude.ai/code/session_011saZHGHgVvBWxJ7nougTPN


Generated by Claude Code

A share of a game clock was also the deadline, so a depth begun under
the soft line and still running at the share was cut there. Now a share
carries a limit beside it: three shares, at most a quarter of the clock,
less the overhead, and never under the share. The search's deadline is
the limit, while the soft line still reads the share, so no depth is
begun on the extra time and only one already under way runs on.

To keep the time spent level the share is 81% of what it was, taken
before the overhead (about 0.79 after it at 10+0.1). Over 100 games of a
10+0.1 match replayed at a node budget, the search spent 0.71 of each
share stopping at it and 0.91 running on, and with the share at 0.813 of
the old one the replayed clocks end at the same mean. A move time and an
increment with no clock are unchanged and have nothing past their
budget.

The same replay, each changed move judged by a deeper search of the
position after it, put the value per extra node of running on at 1.81
times that of a share half again as large on every move (95% 0.92 to
3.54).

Played at 10+0.1 against master d82638a, it passed sprt [0, 10] at LLR
4.93: +32 ±14 over 1,000 games in two batches, which read +31 and +33.
The estimate is a stopped sequential one, so it leans high. The
candidate had 1.009 of master's time and ended 115 ms lower (95% -148
to -83), with no losses on time. A fixed 1,000 games at 30+0.3 read +13
±14 (95% -1 to +27) at 1.001 of the time, also with no losses on time.

The bench is fixed depth and reads no clock, so it is unchanged.

Bench: 11088536
Elo: +32 ±14 (sprt [0, 10] passed, 1000 games, 10+0.1, vs d82638a)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011saZHGHgVvBWxJ7nougTPN
@github-actions

Copy link
Copy Markdown
Contributor

Speed against d82638ae

Measured on AMD EPYC 9V74 80-Core Processor.
Both sides built with rustc 1.99.0 (b940084d7 2026-09-28).

Both sides built and run on this runner in this job, the way
scripts/speed.sh measures a perf commit. Each round runs
both sides on a layout of its own, the same compiled code with
its code and data shuffled and moved, so the 95% interval carries
where the code landed as well as the run. The verdict holds the
interval against a 1% threshold. The default layout, the one a
release ships, is measured after as a diagnostic. The node
counts are the search's: they move when the search does, and a
speed change leaves them alone.

round     base nps  candidate nps  change
    1      4915473        5074354   +3.2%
    2      5031317        5005645   -0.5%
    3      5035679        4976950   -1.2%
    4      4995049        4944209   -1.0%
    5      5044221        5053419   +0.2%
    6      4975431        5009125   +0.7%
    7      4827575        4868192   +0.8%
    8      4492412        4637748   +3.2%
    9      4807901        5126456   +6.6%
   10      5161566        4988160   -3.4%
   11      4961093        5129973   +3.4%
   12      5068864        5086990   +0.4%
   13      4898204        5173375   +5.6%
   14      5050558        5106770   +1.1%
   15      5109220        4997082   -2.2%
   16      5011489        5135692   +2.5%
   17      4932897        5031454   +2.0%
   18      4986623        5060744   +1.5%
   19      4842578        5023112   +3.7%
   20      5097753        4989233   -2.1%
   21      5140440        4925617   -4.2%
   22      5122892        5016070   -2.1%
   23      4673556        4876709   +4.3%
   24      4674062        4668499   -0.1%
   25      4893472        5159469   +5.4%
   26      5333550        5242923   -1.7%
   27      5138053        5150992   +0.3%
   28      5118222        5027471   -1.8%
   29      5080876        5132680   +1.0%
   30      5053451        5230115   +3.5%
   31      5162892        5154931   -0.2%
   32      5188701        5201970   +0.3%
   33      5026343        4570170   -9.1%
   34      4449230        4460566   +0.3%
   35      4772126        5115301   +7.2%
   36      5024913        5081340   +1.1%
   37      5015907        4968402   -0.9%
   38      5112013        4957283   -3.0%
   39      5011375        4848030   -3.3%
   40      5001752        4932800   -1.4%

              nodes    time  median nps  faster half
base       11088536  2.21 s     5020410      5105076
candidate  11088536  2.21 s     5025292      5123821
change                            +0.1%        +0.4%

paired change +0.5%, 95% interval -0.5% to +1.5%
diagnostic, on the default layout alone -0.5%, 95% interval -2.6% to +1.0%, 13 rounds

not resolved: the interval reaches past ±1.0% without clearing it, so
more rounds are needed to say either way

Speed: +0.5% (bench nps, 95% interval -0.5% to +1.5%, 40 interleaved rounds over shuffled layouts vs d82638ae)

The instructions each side's bench executed, counted under
cachegrind. The count repeats to within a few hundred
instructions, so a small change here is a real one, but it
prices instructions only: cache misses, mispredicted branches
and where the code lands are the speed's to show.

instructions against d82638ae, one cachegrind run a side, bench

             instructions     nodes  per node
base       16,519,609,518  11088536    1489.8
candidate  16,519,615,598  11088536    1489.8
change             +0.00%              +0.00%

within ±0.7%, as far as edits not made for speed have moved the count

@aywrite
aywrite merged commit b48777a into master Oct 12, 2026
21 checks passed
@aywrite
aywrite deleted the claude/candidate-6-root-effort-2q00jf branch October 12, 2026 15:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants