Dev Builds » 20260519-1636

Use this dev build

NCM plays each Stockfish dev build 20,000 times against Stockfish 15. This yields an approximate Elo difference and establishes confidence in the strength of the dev builds.

Summary

Host Duration Avg Base NPS Games WLD Standard Elo Ptnml(0-2) Gamepair Elo
ncm-dbt-01 06:42:37 582660 4000 1768 290 1942 +134.75 ± 4.35 0 15 528 1421 36 +316.07 ± 14.77
ncm-dbt-02 06:41:42 585812 4000 1805 318 1877 +135.66 ± 4.31 0 18 506 1447 29 +321.93 ± 15.11
ncm-dbt-03 06:43:28 585288 4000 1785 311 1904 +134.35 ± 4.38 1 17 522 1427 33 +316.07 ± 14.87
ncm-dbt-04 06:42:38 566611 4000 1785 343 1872 +131.14 ± 4.43 0 19 556 1389 36 +303.38 ± 14.39
ncm-dbt-05 06:44:46 582780 4000 1787 301 1912 +135.56 ± 4.46 0 24 506 1430 40 +317.52 ± 15.13
20000 8930 1563 9507 +134.29 ± 1.96 1 93 2618 7114 174 +314.92 ± 6.63

Test Detail

ID Host Base NPS Games WLD Standard Elo Ptnml(0-2) Gamepair Elo CLI PGN
469902 ncm-dbt-01 582027 500 225 39 236 +135.76 ± 13.01 0 4 62 178 6 +315.35 ± 43.81
469901 ncm-dbt-04 564409 500 221 48 231 +125.38 ± 12.7 0 3 75 168 4 +285.49 ± 39.5
469900 ncm-dbt-05 583992 500 227 39 234 +137.37 ± 14.25 0 7 58 175 10 +309.64 ± 45.27
469899 ncm-dbt-03 585295 500 225 37 238 +137.37 ± 12.36 0 1 66 177 6 +321.19 ± 42.12
469898 ncm-dbt-02 584411 500 226 41 233 +134.95 ± 12.04 0 2 64 181 3 +321.19 ± 42.95
469897 ncm-dbt-01 583740 500 219 38 243 +131.74 ± 12.93 0 2 72 169 7 +298.62 ± 40.29
469896 ncm-dbt-04 566691 500 227 37 236 +138.99 ± 12.3 0 0 67 176 7 +324.16 ± 41.61
469895 ncm-dbt-05 583698 500 220 47 233 +125.38 ± 13.07 0 4 74 167 5 +282.94 ± 39.86
469894 ncm-dbt-03 582360 500 224 30 246 +142.25 ± 11.95 0 2 56 188 4 +346.12 ± 46.15
469893 ncm-dbt-02 585843 500 224 34 242 +138.99 ± 12.7 0 5 54 187 4 +333.32 ± 47.06
469892 ncm-dbt-01 581527 500 230 38 232 +140.62 ± 12.02 0 1 61 183 5 +336.46 ± 43.96
469891 ncm-dbt-05 581070 500 230 38 232 +140.62 ± 12.64 0 2 61 180 7 +330.23 ± 44.08
469890 ncm-dbt-04 566454 500 219 45 236 +126.17 ± 12.68 0 2 77 166 5 +285.49 ± 38.83
469889 ncm-dbt-03 584790 500 218 34 248 +134.15 ± 12.06 0 3 62 183 2 +321.19 ± 43.77
469888 ncm-dbt-02 586054 500 225 43 232 +132.54 ± 12.32 0 3 65 179 3 +312.48 ± 42.67
469887 ncm-dbt-01 580240 500 219 35 246 +134.15 ± 12.27 0 4 60 184 2 +321.19 ± 44.57
469886 ncm-dbt-04 566257 500 223 45 232 +129.35 ± 12.41 0 3 69 175 3 +301.33 ± 41.33
469885 ncm-dbt-03 583824 500 226 51 223 +126.97 ± 12.66 1 1 73 172 3 +295.94 ± 39.99
469884 ncm-dbt-05 580696 500 225 35 240 +138.99 ± 11.88 0 1 62 183 4 +333.32 ± 43.57
469883 ncm-dbt-02 585717 500 218 40 242 +129.35 ± 11.81 0 2 69 178 1 +306.84 ± 41.23
469882 ncm-dbt-01 584159 500 219 33 248 +135.76 ± 11.8 0 1 65 181 3 +324.17 ± 42.47
469881 ncm-dbt-04 565902 500 222 46 232 +127.76 ± 12.65 0 3 72 171 4 +293.29 ± 40.39
469880 ncm-dbt-02 584874 500 222 43 235 +130.14 ± 12.39 0 0 77 167 6 +295.94 ± 38.53
469879 ncm-dbt-03 586054 500 226 41 233 +134.95 ± 12.24 0 2 65 179 4 +318.25 ± 42.59
469878 ncm-dbt-05 583824 500 215 36 249 +130.14 ± 12.78 0 4 67 175 4 +301.33 ± 42.04
469877 ncm-dbt-01 582652 500 226 35 239 +139.8 ± 12.05 0 0 65 179 6 +330.23 ± 42.3
469876 ncm-dbt-04 565863 500 227 38 235 +138.18 ± 12.93 0 3 62 178 7 +321.19 ± 43.77
469875 ncm-dbt-02 586774 500 223 45 232 +129.35 ± 12.21 0 3 68 177 2 +304.07 ± 41.65
469874 ncm-dbt-03 586308 500 215 38 247 +128.55 ± 12.04 0 2 71 175 2 +301.33 ± 40.6
469873 ncm-dbt-05 584411 500 233 36 231 +144.71 ± 12.26 0 2 55 187 6 +349.43 ± 46.59
469872 ncm-dbt-01 583112 500 219 44 237 +126.97 ± 12.47 0 2 75 169 4 +290.66 ± 39.4
469871 ncm-dbt-04 567086 500 230 47 223 +133.34 ± 12.09 0 3 63 182 2 +318.25 ± 43.39
469870 ncm-dbt-02 586858 500 226 39 235 +136.56 ± 11.97 0 1 65 180 4 +324.17 ± 42.47
469869 ncm-dbt-03 587240 500 227 40 233 +136.56 ± 12.98 0 3 64 176 7 +315.35 ± 43.03
469868 ncm-dbt-05 582819 500 214 35 251 +130.14 ± 11.78 0 1 71 176 2 +306.84 ± 40.47
469867 ncm-dbt-01 583824 500 211 28 261 +133.34 ± 11.88 0 1 68 178 3 +315.35 ± 41.44
469866 ncm-dbt-04 570228 500 216 37 247 +130.14 ± 12.39 0 2 71 173 4 +301.33 ± 40.6
469865 ncm-dbt-02 585970 500 241 33 226 +153.86 ± 11.76 0 2 44 198 6 +389.56 ± 52.48
469864 ncm-dbt-03 586435 500 224 40 236 +134.15 ± 12.67 0 3 65 177 5 +312.48 ± 42.67
469863 ncm-dbt-05 581735 500 223 35 242 +137.37 ± 11.94 0 3 58 187 2 +333.32 ± 45.35

Commit

Commit ID fff35786bf4a5941a017066842f6977398ddac7e
Author anematode
Date 2026-05-19 16:36:11 UTC
Use bitset representation for nnz and move computation into feature transformer Passed avx2/bmi2 STC: https://tests.stockfishchess.org/tests/view/69ff99eb9392f0c317213eda LLR: 2.93 (-2.94,2.94) <0.00,2.00> Total: 20992 W: 5469 L: 5192 D: 10331 Ptnml(0-2): 38, 2197, 5751, 2470, 40 Passed avxvnni STC: https://tests.stockfishchess.org/tests/view/6a00022b9392f0c317213f7c LLR: 2.93 (-2.94,2.94) <0.00,2.00> Total: 47328 W: 12328 L: 12009 D: 22991 Ptnml(0-2): 112, 5148, 12847, 5423, 134 Passed NEON STC: https://tests.stockfishchess.org/tests/view/69ff99d69392f0c317213ed8 LLR: 2.96 (-2.94,2.94) <0.00,2.00> Total: 29600 W: 7664 L: 7376 D: 14560 Ptnml(0-2): 48, 3074, 8277, 3344, 57 Passed avx512icl non-regression: https://tests.stockfishchess.org/tests/view/6a002b699392f0c317213f91 LLR: 2.94 (-2.94,2.94) <-1.75,0.25> Total: 90112 W: 23130 L: 22975 D: 44007 Ptnml(0-2): 192, 9939, 24633, 10106, 186 Measurements from vondele (Neoverse V2, armv8-dotprod): ==== master ==== ==== Bench: 2344696 ==== 1 Nodes/second : 280724660 2 Nodes/second : 280647282 3 Nodes/second : 282055192 Average (over 3): 281142378 ==== 50a44640a3 ==== ==== Bench: 2344696 ==== 1 Nodes/second : 284271937 2 Nodes/second : 285638071 3 Nodes/second : 284349426 Average (over 3): 284753144 The patch's benefit is non-uniform and is ~0 for avx512icl unfortunately -- although I think we should be able to find something there.... ## Background/explanation The idea here is to move the non-zero block computation back to the previous layer, and overlap the work better. Then, to avoid trying to emulate compress instructions on targets not supporting them (i.e., everything except for AVX512), we use a `pop_lsb` loop on a bitset enumerating the non-zero blocks, rather than first writing them out as indices. An early AVX2 implementation worked on fishtest (https://tests.stockfishchess.org/tests/view/69c3410534b6988b1e472db4) and linrock demonstrated that it also worked for NEON (https://tests.stockfishchess.org/tests/view/69ce0dc73ddc0eccd617188f). Thanks to him for encouraging me to push this idea over the finish line. To abstract over the particular NNZ representation (bitset or index list), we use `NNZInfo` and `NNZCursor`. The cursor is used to write to one or the other perspective of the NNZ list. I'd appreciate ideas on making the code cleaner/more readable as imo it's still a bit ugly. ## Fixing GCC 15 regression Separately, vondele noticed a regression in ARM performance from GCC 15 caused by suboptimal codegen. See https://discord.com/channels/435943710472011776/813919248455827515/1502837886381461605 for more info, but the easiest fix that I could come up with was inserting a couple `asm` optimization barriers. Single threaded data: ``` average: stockfish.master.13.3 1041619 average: stockfish.master.15.2 999214 average: stockfish.patched.15.2 1031369 ``` There's definitely regressions elsewhere as well, which we shld chase down, but at least this should unblock the arm64 universal binary work. closes https://github.com/official-stockfish/Stockfish/pull/6814 No functional change
Copyright 2011–2026 Next Chess Move LLC