Shawn Xu and Disservin
93f2d14d95
Simplify Incremental Updates
...
Passed Non-regression STC:
LLR: 3.03 (-2.94,2.94) <-1.75,0.25>
Total: 277856 W: 71575 L: 71611 D: 134670
Ptnml(0-2): 842, 30719, 75836, 30695, 836
https://tests.stockfishchess.org/tests/view/69169dc17ca8781852331d76
Supersedes #6430
closes https://github.com/official-stockfish/Stockfish/pull/6434
No functional change
2025-11-30 21:43:54 +01:00
Shawn Xu and Disservin
1132d893e0
Simplify Accumulator Updates
...
Passed Non-regression STC:
LLR: 2.93 (-2.94,2.94) <-1.75,0.25>
Total: 146848 W: 37915 L: 37820 D: 71113
Ptnml(0-2): 415, 16159, 40186, 16244, 420
https://tests.stockfishchess.org/tests/view/691772217ca878185233202b
closes https://github.com/official-stockfish/Stockfish/pull/6421
No functional change
2025-11-30 21:41:51 +01:00
Joost VandeVondele
a27fcd6274
Fix format
...
No functional change
2025-11-17 13:57:53 +01:00
Carlos Esparza and Joost VandeVondele
2084d94266
inline make_index() and avoid templating perspective
...
combination of two patches.
pass perspective as argument
passed STC:
LLR: 2.95 (-2.94,2.94) <-1.75,0.25>
Total: 52832 W: 13725 L: 13528 D: 25579
Ptnml(0-2): 154, 5756, 14412, 5927, 167
https://tests.stockfishchess.org/tests/view/69162e307ca8781852331c6a
inline make_index
passed STC:
LLR: 2.93 (-2.94,2.94) <-1.75,0.25>
Total: 68768 W: 17786 L: 17607 D: 33375
Ptnml(0-2): 187, 7591, 18694, 7680, 232
https://tests.stockfishchess.org/tests/view/6916859e7ca8781852331d36
closes https://github.com/official-stockfish/Stockfish/pull/6429
No functional change
2025-11-17 13:34:45 +01:00
Shawn Xu and Joost VandeVondele
1d504b927f
Fix undefined behavior
...
C++ standard does not define `uint8_t` as an allowed pointer alias type. Despite
`uint8_t` being `unsigned char` on most platforms, this is not enforced by the standard.
https://eel.is/c++draft/basic.lval#11
https://stackoverflow.com/a/16138470
closes https://github.com/official-stockfish/Stockfish/pull/6420
No functional change
2025-11-14 17:43:44 +01:00
Shawn Xu and Joost VandeVondele
db824e26be
Pass accumulator caches by reference
...
closes https://github.com/official-stockfish/Stockfish/pull/6416
No functional change
2025-11-14 17:32:17 +01:00
Shawn Xu and Joost VandeVondele
bd82b9e01f
Cleanup, fix style issues
...
use naming convention for variables, functions, constants
closes https://github.com/official-stockfish/Stockfish/pull/6416
no functional change
2025-11-14 17:29:01 +01:00
Timothy Herchen and Joost VandeVondele
fa4f05d3ef
Don't copy around DirtyThreats
...
The contents of DirtyThreats gets memcpyed twice for each call to do_move.
(Return value optimization doesn't apply to the do_move function itself because
it constructs a std::pair, so it gets copied; and the calls to reset also
require a copy.) This patch inserts the dirty info in place.
Sometimes the caller of do_move ignores the DirtyThreats info, so we pass in
scratch objects. I found that stack-allocating these scratch objects was bad on
Fishtest, so I begrudgingly put them in the Position struct. Both templating
the do_move function on whether dirty threats are needed and putting a
null-check branch for each use of dirty threats were slowdowns locally. Of
course, nothing prevents a future attempt at cleaning this up.
passed STC
LLR: 2.96 (-2.94,2.94) <0.00,2.00>
Total: 68448 W: 17770 L: 17418 D: 33260
Ptnml(0-2): 198, 7425, 18630, 7769, 202
https://tests.stockfishchess.org/tests/view/6914c01a7ca87818523318ba
closes https://github.com/official-stockfish/Stockfish/pull/6414
No functional change
2025-11-13 22:17:03 +01:00
Viren6 and Joost VandeVondele
3ae7684714
Improve Threats Speed
...
Passed STC:
LLR: 2.95 (-2.94,2.94) <0.00,2.00>
Total: 23168 W: 6132 L: 5845 D: 11191
Ptnml(0-2): 77, 2405, 6325, 2708, 69
https://tests.stockfishchess.org/tests/view/69148c3c7ca8781852331831
```
Result of 50 runs
==================
base (./stockfish.master ) = 985641 +/- 4249
test (./stockfish.patch ) = 1038567 +/- 5679
diff = +52926 +/- 4473
speedup = +0.0537
P(speedup > 0) = 1.0000
CPU: 16 x AMD Ryzen 9 3950X 16-Core Processor
Hyperthreading: on
```
closes https://github.com/official-stockfish/Stockfish/pull/6415
No functional change
2025-11-13 22:13:47 +01:00
+1
8e5392d79a
Update NNUE architecture to SFNNv10 with Threat Inputs and net nn-49c1193b131c.nnue
...
This commit introduces Full Threat Input features, which are a subset of Piece(Square)-Piece(Square) pairs. In any given position, the active features consist of pairs where the second piece’s square lies in the attack set of the first piece. This is an extremely simplified explanation that leaves out many details. The already-used HalfKAv2_hm feature set completes the input features.
Minor quantization changes have also been made.
The net nn-49c1193b131c.nnue was trained by vondele using the following setup: https://github.com/vondele/nettest/blob/7de71238e9b295e3f88ed7c9c5936af632c9b981/threats.yaml
A graphical version of an earlier scheme (with less refinement) that illustrates the core concepts can be found attached.
[NewInputs.pdf](https://github.com/user-attachments/files/23478441/NewInputs.pdf )
Further information, as well as a brief description of the history of development, can be found attached.
[Stockfish threat inputs PR summary.pdf](https://github.com/user-attachments/files/23478634/Stockfish.threat.inputs.PR.summary.pdf )
This has been a huge effort spanning over half a year, with the original [discussion thread](https://discord.com/channels/435943710472011776/1336647760388034610 ) reaching over 11k messages. Thanks to everyone who has contributed.
Monty PRs:
https://github.com/official-monty/Monty/pull/87 (Initial threat input PR)
https://github.com/official-monty/Monty/pull/114 (Fixed threat indexing to take into account colour correctly)
https://github.com/official-monty/Monty/pull/116 (i8 quantisation of weights whilst keeping calculations in i16)
Yukari commit:
https://github.com/yukarichess/yukari/commit/2d482c64a79cec03cf4987d5289334b9cdc737bc (Threat inputs merged)
Plentychess PRs:
https://github.com/Yoshie2000/PlentyChess/pull/400 (Threat inputs merged)
https://github.com/Yoshie2000/PlentyChess/pull/411 (Threat input weights quantised to i8)
Passed STC:
LLR: 2.93 (-2.94,2.94) <0.00,2.00>
Total: 63424 W: 16956 L: 16591 D: 29877
Ptnml(0-2): 276, 7522, 15797, 7795, 322
https://tests.stockfishchess.org/tests/view/69105b3dec1d00d2c195c569
Passed LTC:
LLR: 2.95 (-2.94,2.94) <0.50,2.50>
Total: 27876 W: 7417 L: 7110 D: 13349
Ptnml(0-2): 23, 3033, 7530, 3318, 34
https://tests.stockfishchess.org/tests/view/6910d817ec1d00d2c195c66e
Passed VVLTC (Hash accidentally set to 1/2 normal value for both sides):
LLR: 2.94 (-2.94,2.94) <0.50,2.50>
Total: 12458 W: 3353 L: 3102 D: 6003
Ptnml(0-2): 0, 1106, 3767, 1355, 1
https://tests.stockfishchess.org/tests/view/69115a26ec1d00d2c195c7cd
This version has also passed non-regression LTC against the originally passed version:
LLR: 2.94 (-2.94,2.94) <-1.75,0.25>
Total: 51144 W: 13086 L: 12903 D: 25155
Ptnml(0-2): 22, 5167, 15018, 5336, 29
https://tests.stockfishchess.org/tests/view/69138a317ca87818523314bf
LTC elo estimate on ARM:
1 patch : 13.9 1.9 38296.5 73728 52
2 master : 0.0 ---- 35431.5 73728 48
closes https://github.com/official-stockfish/Stockfish/pull/6411
bench: 2626086
Co-authored-by: Shawn Xu <xu107288696@gmail.com >
Co-authored-by: Timothy Herchen <timothy.herchen@gmail.com >
Co-authored-by: Viren6 <94880762+Viren6@users.noreply.github.com >
Co-authored-by: Yoshie2000 <patrick.leonhardt@gmx.net >
Co-authored-by: Joost Vandevondele <Joost.VandeVondele@gmail.com >
Co-authored-by: rn5f107s2 <clemens.lerchl@gmail.com >
Co-authored-by: cj5716 <125858804+cj5716@users.noreply.github.com >
Co-authored-by: AliceRoselia <63040919+AliceRoselia@users.noreply.github.com >
Co-authored-by: Linmiao Xu <linmiao.xu@gmail.com >
Co-authored-by: Disservin <disservin.social@gmail.com >
2025-11-12 10:49:39 +01:00
69a01b88f3
Use shared memory for network weights
...
This enables different Stockfish processes that use the same weights to use the
same memory. The approach establishes equivalence by memory content, and is
compatible with NUMA replication. The benefit of sharing is reduced memory usage
and a speedup thanks to improved (inter-process) caching of the network in the
CPUs cache, and thus reduced bandwidth usage to main memory. Even though this
change doesn't benefit a user running a single process, this helps on fishtest
or e.g. for Lichess, when multiple games run concurrently, or multiple
positions are analyzed in parallel.
This concept was probably first introduced in the Monty engine
(https://github.com/official-monty/Monty/pull/62 ), after a discussion in
https://github.com/official-stockfish/fishtest/issues/2077 on the issue of
memory pressure. Measurements based on Torch
(https://github.com/user-attachments/files/21386224/verbatim.pdf ) further
suggested that large gains were possible. Multiple other engines have
adopted this 'verbatim' format as well.
The implementation here adds the flexibility needed for SF, for example, retains
the ability to bundle compressed networks with the binary, to load nets by uci
option, and to distribute the shared nets to the proper NUMA region. This
flexibility comes with a fair amount of complexity in the implementation, such
as OS specific code, and fallback code.
For most users this should be transparent. However, for example, those running
docker containers should ensure the `--ipc` flag is set correctly, and
`--shm-size` is sufficiently large.
The benefits of this patch significantly depend on hardware, with systems with
many cores and a large (O(150MB), the net size) L3 cache benefitting typically
most. On such systems SF speedups (as measured via nps playing games with
large concurrency but just 1 thread) can be 38%, which results in master vs.
patch Elo which gains about 25 Elo.
```
# PLAYER : RATING ERROR POINTS PLAYED (%)
1 shared_memoryPR : 24.8 1.9 39432.0 73728 53
2 master : 0.0 ---- 34296.0 73728 47
```
In a multithreaded setup, where weights are already shared, that benefit is smaller,
for example on the same HW as above, but with 8t for each side.
```
# PLAYER : RATING ERROR POINTS PLAYED (%)
1 shared_memoryPR : 5.2 3.5 9351.0 18432 51
2 master : 0.0 ---- 9081.0 18432 49
```
On fishtest with a typical hardware mix of our contributors, the following was measured:
STC, 60k games
https://tests.stockfishchess.org/tests/view/69074a49ea4b268f1fac236c
Elo: 4.69 ± 1.4 (95%) LOS: 100.0%
Total: 60000 W: 16085 L: 15275 D: 28640
Ptnml(0-2): 154, 6440, 16053, 7148, 205
nElo: 9.38 ± 2.8 (95%) PairsRatio: 1.12
To verify correctness with a single process on a NUMA architecture,
speedtest was used, confirming near equivalence:
```
master: Average (over 10): 296236186
shared_memory: Average (over 10): 295769332
```
Currently, using large pages for the shared network weights is not always possible,
which can lead to a small slowdown (1-2%), in case a single process is run.
closes https://github.com/official-stockfish/Stockfish/pull/6173
No functional change
Co-authored-by: disservin <disservin.social@gmail.com >
Co-authored-by: Joost VandeVondele <Joost.VandeVondele@gmail.com >
2025-11-02 16:04:09 +01:00
Carlos Esparza and Joost VandeVondele
e9674a7888
simplify make_index()
...
passed non-regression STC: https://tests.stockfishchess.org/tests/view/68fdb409637acd2a11e72f11
LLR: 3.08 (-2.94,2.94) <-1.75,0.25>
Total: 95008 W: 24837 L: 24677 D: 45494
Ptnml(0-2): 268, 10024, 26775, 10154, 283
closes https://github.com/official-stockfish/Stockfish/pull/6384
no functional change
2025-11-01 11:34:54 +01:00
Carlos Esparza and Joost VandeVondele
11ab4cde07
Avoid unnecessary allocations in AccumulatorStack
...
replacing the vector with an array resulted in a .45+-.10 % speedup.
closes https://github.com/official-stockfish/Stockfish/pull/6352
no functional change
2025-11-01 11:12:03 +01:00
Timothy Herchen and Joost VandeVondele
6764561916
Improve index generation
...
The speedup seems to vary by machine. The indexing function can be changed w/o needing to understand intrinsics.
Result of 100 runs
==================
base (...ish_baseline) = 1719637 +/- 3233
test (./stockfish ) = 1734245 +/- 3534
diff = +14608 +/- 4868
speedup = +0.0085
P(speedup > 0) = 1.0000
closes https://github.com/official-stockfish/Stockfish/pull/6366
No functional change
2025-11-01 10:42:42 +01:00
Shawn Xu and Joost VandeVondele
f434cc2918
Allow AccumulatorStack::size to point to one past the end
...
this is guaranteed to be correct since we access the last element with `size - 1`
closes https://github.com/official-stockfish/Stockfish/pull/6368
fixes https://github.com/official-stockfish/Stockfish/issues/6367
no functional change
2025-11-01 10:34:44 +01:00
mstembera and Joost VandeVondele
c956df4cbb
Split accumulator 3-way for avxvnni
...
This does the same thing for x86-64-avxvnni as #6336 , #6339 .
closes https://github.com/official-stockfish/Stockfish/pull/6347
No functional change
2025-10-14 17:25:48 +02:00
b09339a420
Split accumulator 3-Way
...
Squeeze a tiny bit more juice from the original idea in #6336 which this is on top of.
https://tests.stockfishchess.org/tests/view/68dddd85fa806e2e8393c0b9
LLR: 2.95 (-2.94,2.94) <0.00,2.00>
Total: 156320 W: 40925 L: 40447 D: 74948
Ptnml(0-2): 427, 17330, 42172, 17800, 431
4-way doesn't look to be better than this.
https://tests.stockfishchess.org/tests/view/68dde19efa806e2e8393c0c1
closes https://github.com/official-stockfish/Stockfish/pull/6339
No functional change
Co-authored-by: M Stembera <m_stembera@yahoo.com >
2025-10-05 09:33:23 +02:00
Timothy Herchen and Joost VandeVondele
9b164d9520
Shave some instructions off a hot loop in affine transform
...
On x86, GCC generates highly suboptimal code for this loop in its old form,
about 2x as many instructions as necessary. This decreases throughput
especially in an SMT setting. Clang does a better job but this change still has
some improvement. Note that the std::ptrdiff_t type is not optional; using an
unsigned type brings back the bad assembly. (Not sure why, but it seems
reliable on all the GCC versions I tested.)
passed STC:
LLR: 2.93 (-2.94,2.94) <0.00,2.00>
Total: 44672 W: 11841 L: 11527 D: 21304
Ptnml(0-2): 165, 4625, 12415, 4993, 138
https://tests.stockfishchess.org/tests/view/68d8111efa806e2e8393b10e
closes https://github.com/official-stockfish/Stockfish/pull/6331
No functional change
2025-09-28 21:04:29 +02:00
mstembera and Joost VandeVondele
0383670cd5
Avoid using _mm512_storeu_epi16()
...
gcc 9 & 10 do not provide this function, instead use the generic _mm512_storeu_si512
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95483
https://tests.stockfishchess.org/actions?max_actions=1&action=&user=&text=&before=1755266300.455175&run_id=
closes https://github.com/official-stockfish/Stockfish/pull/6231
No functional change
2025-08-16 11:46:39 +02:00
mstembera and Joost VandeVondele
5464f7b114
Remove an instruction from find_nnz()
...
closes https://github.com/official-stockfish/Stockfish/pull/6212
No functional change
2025-08-09 08:54:47 +02:00
mstembera and Joost VandeVondele
83071917e9
Optimize find_nnz() using VBMI2
...
about a 0.7% speedup for the x86-64-avx512icl ARCH
closes https://github.com/official-stockfish/Stockfish/pull/6186
No functional change
2025-08-02 15:49:35 +02:00
mstembera and Disservin
ce7254b5ea
Optimize find_nnz() using AVX512
...
About a 1% speedup for ARCH x86-64-avx512 and x86-64-vnni512.
Note: This could be optimized further if we wanted to add an ARCH
supporting VBMI2 which is even more modern than VNNI.
https://en.wikichip.org/wiki/x86/avx512_vbmi2
closes https://github.com/official-stockfish/Stockfish/pull/6139
No functional change
2025-07-02 18:41:45 +02:00
mstembera and Joost VandeVondele
d27298d7dc
Remove unused threatenedPieces
...
threatenedPieces is no longer used since #6023
Also can_move_king_or_pawn() can be const.
Also remove a couple of redundant declarations.
closes https://github.com/official-stockfish/Stockfish/pull/6101
No functional change
2025-06-02 21:24:38 +02:00
Shawn Xu and Joost VandeVondele
dc85c5a4c9
Remove nnz lookup table load optimization
...
Passed Non-regression STC:
LLR: 2.95 (-2.94,2.94) <-1.75,0.25>
Total: 63296 W: 16491 L: 16311 D: 30494
Ptnml(0-2): 129, 6624, 17972, 6784, 139
https://tests.stockfishchess.org/tests/view/6833ce486ec7634154f9cb22
Passed 2nd Non-regression STC:
LLR: 2.97 (-2.94,2.94) <-1.75,0.25>
Total: 369568 W: 95314 L: 95451 D: 178803
Ptnml(0-2): 897, 40231, 102601, 40222, 833
https://tests.stockfishchess.org/tests/view/68355c956ec7634154f9ce07
closes https://github.com/official-stockfish/Stockfish/pull/6100
no functional change
2025-06-02 21:21:54 +02:00
Shawn Xu and Joost VandeVondele
472cc764be
Move SIMD code to a separate header
...
Passed Non-regression STC:
LLR: 2.94 (-2.94,2.94) <-1.75,0.25>
Total: 115328 W: 29903 L: 29777 D: 55648
Ptnml(0-2): 265, 12293, 32444, 12375, 287
https://tests.stockfishchess.org/tests/view/68300e086ec7634154f9b1d1
closes https://github.com/official-stockfish/Stockfish/pull/6086
no functional change
2025-05-25 20:52:57 +02:00
Disservin and Joost VandeVondele
2662d6bf35
Update clang-format to v20
...
closes https://github.com/official-stockfish/Stockfish/pull/6085
No functional change
2025-05-23 08:54:06 +02:00
Disservin and Joost VandeVondele
c13c1d2c30
Silence "may be used uninitialized" GCC 15 warning
...
closes https://github.com/official-stockfish/Stockfish/pull/6083
No functional change
2025-05-23 08:53:00 +02:00
Carlos Esparza and Disservin
63c6f22627
Simplify DirtyPiece
...
Simplifies the DirtyPiece struct.
passed STC: https://tests.stockfishchess.org/tests/view/68054c9798cd372e3aea05d7
LLR: 2.94 (-2.94,2.94) <-1.75,0.25>
Total: 36608 W: 9641 L: 9437 D: 17530
Ptnml(0-2): 89, 3630, 10668, 3822, 95
passed LTC: https://tests.stockfishchess.org/tests/view/6805514598cd372e3aea0783
LLR: 2.95 (-2.94,2.94) <-1.75,0.25>
Total: 127620 W: 31993 L: 31894 D: 63733
Ptnml(0-2): 42, 10983, 41665, 11074, 46
closes https://github.com/official-stockfish/Stockfish/pull/6016
No functional change
2025-05-13 20:30:22 +02:00
Carlos Esparza and Disservin
fda269a299
Introduce double incremental accumulator updates
...
when we need to update an accumulator by two moves and the second move
captures the piece moved in the first move, we can skip computing the
middle accumulator and cancel a feature add with a feature remove to
save work.
Passed STC
https://tests.stockfishchess.org/tests/view/67f70b1c31d7cf8afdc45f51
LLR: 2.93 (-2.94,2.94) <0.00,2.00>
Total: 72800 W: 18878 L: 18529 D: 35393
Ptnml(0-2): 160, 7711, 20374, 7930, 225
closes https://github.com/official-stockfish/Stockfish/pull/5988
No functional change
2025-04-27 19:27:18 +02:00
FauziAkram and Joost VandeVondele
8b85290313
Remove manual stack alignment workaround for GCC < 9.3
...
consequently using these old compilers will now error out.
closes https://github.com/official-stockfish/Stockfish/pull/6008
No functional change.
2025-04-26 22:15:08 +02:00
Shawn Xu and Joost VandeVondele
f273eea71f
Remove non-functional accumulator reset
...
Passed Non-regression STC:
LLR: 2.93 (-2.94,2.94) <-1.75,0.25>
Total: 219360 W: 56600 L: 56583 D: 106177
Ptnml(0-2): 582, 23419, 61620, 23518, 541
https://tests.stockfishchess.org/tests/view/67fad20dcd501869c669780f
closes https://github.com/official-stockfish/Stockfish/pull/5986
no functional change
2025-04-26 21:30:01 +02:00
FauziAkram and Disservin
5f8e67a544
Remove combineLast3 optimization
...
Passed non-reg STC 1st:
LLR: 2.96 (-2.94,2.94) <-1.75,0.25>
Total: 67328 W: 17296 L: 17118 D: 32914
Ptnml(0-2): 158, 7095, 19011, 7211, 189
https://tests.stockfishchess.org/tests/view/67e6c2796682f97da2178ebe
Passed non-reg STC 2nd:
LLR: 2.93 (-2.94,2.94) <-1.75,0.25>
Total: 92288 W: 23885 L: 23734 D: 44669
Ptnml(0-2): 213, 10039, 25518, 10132, 242
https://tests.stockfishchess.org/tests/view/67ed6a2d31d7cf8afdc45190
closes https://github.com/official-stockfish/Stockfish/pull/5975
Bench: 1875196
2025-04-18 14:32:26 +02:00
mstembera and Disservin
8d2eef2b1e
Fix fused() all controll paths should return a value.
...
closes https://github.com/official-stockfish/Stockfish/pull/5973
No functional change
2025-04-18 14:32:26 +02:00
mstembera and Disservin
1577fa0470
Simplify Forward and Backward
...
Forward and Backward are not independent so simplify to a bool.
Cleanup some MSVC warnings like "warning C4267: 'argument': conversion
from 'size_t' to 'int', possible loss of data" Other minor formatting
stuff.
This is a rebase of https://github.com/official-stockfish/Stockfish/pull/5912
closes https://github.com/official-stockfish/Stockfish/pull/5967
No functional change
2025-04-18 14:32:19 +02:00
Disservin
7beff18ef0
Retire Acc Pointer
...
Since @xu-shawn's refactor the acc pointer has become a bit unnecessary,
we can achieve the same behavior by using the dimension size to get the
right accumulator from the `AccumulatorState`. I think the acc pointer
has become a bit of a burden required to be passed through multiple
different functions together with the necessary templating required.
Passed Non-Regression STC:
https://tests.stockfishchess.org/tests/view/67ed600f31d7cf8afdc45183
LLR: 2.94 (-2.94,2.94) <-1.75,0.25>
Total: 279744 W: 72037 L: 72082 D: 135625
Ptnml(0-2): 673, 29918, 78767, 29809, 705
closes https://github.com/official-stockfish/Stockfish/pull/5942
No functional change
2025-04-18 13:54:09 +02:00
mstembera and Disservin
ed89817f62
Various cleanups
...
Various simplifications, cleanups, consistancy improvements, and warning
mitigations.
Passed Non-Regression STC:
https://tests.stockfishchess.org/tests/view/67e7dd2d6682f97da2178fd8
LLR: 2.94 (-2.94,2.94) <-1.75,0.25>
Total: 386848 W: 99593 L: 99751 D: 187504
Ptnml(0-2): 1024, 41822, 107973, 41498, 1107
closes https://github.com/official-stockfish/Stockfish/pull/5948
No functional change
2025-04-02 17:43:14 +02:00
Shawn Xu and Disservin
c2ff7a95c3
Cleanup fused updates
...
Passed Non-regression STC:
LLR: 2.95 (-2.94,2.94) <-1.75,0.25>
Total: 70656 W: 18257 L: 18077 D: 34322
Ptnml(0-2): 217, 7912, 18879, 8114, 206
https://tests.stockfishchess.org/tests/view/67e23ae78888403457d876d4
closes https://github.com/official-stockfish/Stockfish/pull/5941
No functional change
2025-04-02 17:34:31 +02:00
Disservin
aafc732bcb
Silence "may be used uninitialized" GCC warning
...
Helps gcc silence the warning about
```
warning: 'added' may be used uninitialized [-Wmaybe-uninitialized]
const IndexType offsetA0 = TransformedFeatureDimensions * added[0];
```
closes https://github.com/official-stockfish/Stockfish/pull/5950
No functional change
2025-03-29 11:55:55 +01:00
Shawn Xu and Disservin
fc0e0a44d4
Refactor accumulator storage/updates
...
Passed Non-regression STC:
LLR: 2.93 (-2.94,2.94) <-1.75,0.25>
Total: 115840 W: 29983 L: 29854 D: 56003
Ptnml(0-2): 338, 12990, 31149, 13091, 352
https://tests.stockfishchess.org/tests/view/67d0a044166a3e8781d84223
closes https://github.com/official-stockfish/Stockfish/pull/5927
No functional change
2025-03-21 11:12:47 +01:00
mstembera and Disservin
e4d7136042
Combine last 3 add/remove operations
...
https://tests.stockfishchess.org/tests/view/67ad587052879dfd14d7e8a5
LLR: 2.95 (-2.94,2.94) <0.00,2.00>
Total: 45856 W: 12177 L: 11855 D: 21824
Ptnml(0-2): 176, 4845, 12588, 5119, 200
The two most common cases are when added and removed counts are equal
and when they are off by 1. When they are off by 1 we currently do a
pass combining 2 and then an extra pass for the last 1. This patch does
a single combined pass on the final 3 instead. Tested on top of the
simplification in
https://github.com/official-stockfish/Stockfish/pull/5901
closes https://github.com/official-stockfish/Stockfish/pull/5902
No functional change
2025-02-27 20:30:44 +01:00
mstembera and Disservin
d330b48e21
Handle updating the small accumulator the same way as the big one
...
https://tests.stockfishchess.org/tests/view/67abfe1ca04df5eb8dbebf0b
LLR: 2.97 (-2.94,2.94) <-1.75,0.25>
Total: 153088 W: 40072 L: 39979 D: 73037
Ptnml(0-2): 619, 16728, 41764, 16807, 626
closes https://github.com/official-stockfish/Stockfish/pull/5901
No functional change
2025-02-27 20:30:10 +01:00
Disservin
291a429cdd
Remove duplicated info string printing
...
Currently "info string" is being printed twice for the network arch
```
info string info string NNUE evaluation using nn-1c0000000000.nnue (133MiB, (22528, 3072, 15, 32, 1))
info string info string NNUE evaluation using nn-37f18f62d772.nnue (6MiB, (22528, 128, 15, 32, 1))
```
closes https://github.com/official-stockfish/Stockfish/pull/5889
No functional change
2025-02-24 19:10:38 +01:00
FauziAkram and Disservin
095d19afea
Use neon_m128_reduce_add_epi32 for NEON vector reduction
...
Accomplishing the entire horizontal addition in a single NEON instruction
closes https://github.com/official-stockfish/Stockfish/pull/5885
No functional change
2025-02-24 19:07:29 +01:00
Carlos Esparza and Disservin
e9997afb1c
Replace hint_common_parent_position() by backwards accumulator updates
...
Only calls to `evaluate()` now trigger NNUE accumulator updates. To make
sure that we are likely to find parent positions from which to update
the accumulators we perform a backwards NNUE update whenever we compute
the accumulator from scratch for some position.
passed STC
LLR: 2.93 (-2.94,2.94) <0.00,2.00>
Total: 39680 W: 10474 L: 10164 D: 19042
Ptnml(0-2): 171, 4068, 11042, 4398, 161
https://tests.stockfishchess.org/tests/view/67a27f26eb183d11c65945be
passed LTC
LLR: 2.94 (-2.94,2.94) <0.50,2.50>
Total: 337308 W: 86408 L: 85550 D: 165350
Ptnml(0-2): 276, 30551, 106126, 31441, 260
https://tests.stockfishchess.org/tests/view/67a287efeb183d11c65945ee
then simplified:
STC
LLR: 2.94 (-2.94,2.94) <-1.75,0.25>
Total: 28608 W: 7641 L: 7413 D: 13554
Ptnml(0-2): 132, 3036, 7744, 3256, 136
https://tests.stockfishchess.org/tests/view/67a4703719f522d3866d3345
LTC
LLR: 2.96 (-2.94,2.94) <-1.75,0.25>
Total: 200226 W: 51026 L: 50990 D: 98210
Ptnml(0-2): 170, 18468, 62799, 18508, 168
https://tests.stockfishchess.org/tests/view/67a4f255229c1a170cc08964
The version in this PR is a bit different from the simplified version,
but it's compile-time changes only.
closes https://github.com/official-stockfish/Stockfish/pull/5870
No functional change
2025-02-24 19:01:23 +01:00
Shawn Xu and Joost VandeVondele
e7367cef0f
Clean up pack reordering
...
closes https://github.com/official-stockfish/Stockfish/pull/5802
no functional change
2025-01-25 20:17:39 +01:00
mstembera and Joost VandeVondele
18b3465a86
Generate lookup indices at compile time.
...
Credit to @Disservin: the constexpr lsb is just the De Bruijn bitscan with the xor from the cpw https://www.chessprogramming.org/BitScan
closes https://github.com/official-stockfish/Stockfish/pull/5801
No functional change
2025-01-25 20:12:38 +01:00
Shawn Xu and Joost VandeVondele
62ecdfe82c
simplify accumulator updates
...
After #5759 accumulator updates are strictly on a per-move basis. Therefore, the generic code for updating multiple moves at once is no longer needed.
Passed Non-regression STC:
LLR: 3.00 (-2.94,2.94) <-1.75,0.25>
Total: 81696 W: 21204 L: 21039 D: 39453
Ptnml(0-2): 210, 8431, 23416, 8566, 225
https://tests.stockfishchess.org/tests/view/67823a24a31c4c13e83518a8
closes https://github.com/official-stockfish/Stockfish/pull/5760
no functional change
2025-01-25 20:09:09 +01:00
mstembera and Joost VandeVondele
329c267e25
Optimize find_nnz() by reducing the size of lookup_indices
...
https://tests.stockfishchess.org/tests/view/67896b688082388fa0cbfdee
LLR: 2.93 (-2.94,2.94) <0.00,2.00>
Total: 452800 W: 118213 L: 117300 D: 217287
Ptnml(0-2): 1638, 50255, 121864, 50842, 1801
It's faster to shrink lookup_indices[] to 8 bit and zero extend to 16 bit using _mm_cvtepu8_epi16() than to read the larger 16 bit version. I suspect that having the constants available at compile time isn't too valuable and can be simplified back to generating at initialization time since this version also almost passed. https://tests.stockfishchess.org/tests/view/67863057460e2910c51de7e0 I will try that as a follow up.
closes https://github.com/official-stockfish/Stockfish/pull/5793
No functional change
2025-01-18 21:13:12 +01:00
pb00067 and Joost VandeVondele
56000827af
Simplify common hint for parent position
...
Removes function hint_common_access_for_perspective together with it's comments,
which weren't accurate anymore since merge of #5576
https://tests.stockfishchess.org/tests/view/6784c9cd460e2910c51dde39
LLR: 2.93 (-2.94,2.94) <-1.75,0.25>
Total: 295104 W: 76702 L: 76765 D: 141637
Ptnml(0-2): 1031, 32135, 81249, 32140, 997
closes https://github.com/official-stockfish/Stockfish/pull/5780
No functional change
2025-01-18 20:35:46 +01:00
Shawn Xu and Disservin
8d517bddff
Simplify accumulator updates
...
AMD Ryzen 5 7600X
```
sf_base = 1902646 +/- 2114 (95%)
sf_test = 1920873 +/- 2515 (95%)
diff = 18227 +/- 3067 (95%)
speedup = 0.95800% +/- 0.161% (95%)
```
Ryzen 9 5950X
```
sf_base = 1413387 +/- 3592 (95%)
sf_test = 1437893 +/- 3355 (95%)
diff = 24505 +/- 4669 (95%)
speedup = 1.73380% +/- 0.330% (95%)
```
Intel Core i7-6700K
```
sf_base = 912476 +/- 1863 (95%)
sf_test = 921864 +/- 2042 (95%)
diff = 9388 +/- 3333 (95%)
speedup = 1.02893% +/- 0.365% (95%)
```
Raspberry Pi 5
```
sf_base = 260993 +/- 1508 (95%)
sf_test = 262912 +/- 1746 (95%)
diff = 1918 +/- 1221 (95%)
speedup = 0.73504% +/- 0.468% (95%)
```
Passed Non-regression STC:
LLR: 2.95 (-2.94,2.94) <-1.75,0.25>
Total: 23072 W: 6041 L: 5813 D: 11218
Ptnml(0-2): 61, 2435, 6319, 2657, 64
https://tests.stockfishchess.org/tests/view/6780a0ca9168c8bf30927757
closes https://github.com/official-stockfish/Stockfish/pull/5759
No functional change
2025-01-12 21:21:53 +01:00