Dev Builds » 20260801-0446

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:41 584046 4000 1786 327 1887 +132.84 ± 4.4 0 19 538 1408 35 +309.64 ± 14.64
ncm-dbt-02 06:43:50 590161 4000 1829 306 1865 +139.3 ± 4.5 0 24 479 1447 50 +327.56 ± 15.57
ncm-dbt-03 06:43:39 576064 4000 1800 297 1903 +137.27 ± 4.42 0 25 484 1454 37 +324.91 ± 15.49
ncm-dbt-04 06:44:30 567379 4000 1809 293 1898 +138.59 ± 4.35 1 14 492 1454 39 +329.46 ± 15.32
ncm-dbt-05 06:44:38 605098 4000 1817 289 1894 +139.81 ± 4.36 0 19 474 1467 40 +333.32 ± 15.64
20000 9041 1512 9447 +137.56 ± 1.97 1 101 2467 7230 201 +324.84 ± 6.84

Test Detail

ID Host Base NPS Games WLD Standard Elo Ptnml(0-2) Gamepair Elo CLI PGN
482043 ncm-dbt-01 582277 500 224 47 229 +128.55 ± 12.43 0 3 70 174 3 +298.62 ± 41.01
482042 ncm-dbt-02 589710 500 229 36 235 +141.44 ± 11.55 0 2 55 191 2 +349.43 ± 46.59
482041 ncm-dbt-03 576210 500 224 37 239 +136.56 ± 12.39 0 3 61 182 4 +324.17 ± 44.15
482040 ncm-dbt-05 606698 500 224 39 237 +134.95 ± 13.03 0 4 63 177 6 +312.48 ± 43.44
482039 ncm-dbt-04 566493 500 226 37 237 +138.18 ± 12.12 0 2 61 183 4 +330.23 ± 44.08
481821 ncm-dbt-05 602873 500 221 38 241 +133.34 ± 12.89 0 4 64 177 5 +309.64 ± 43.08
481820 ncm-dbt-02 590524 500 229 22 249 +153.02 ± 11.81 0 2 45 197 6 +385.59 ± 51.85
481819 ncm-dbt-03 578013 500 230 37 233 +141.44 ± 12.2 0 3 55 188 4 +342.85 ± 46.64
481818 ncm-dbt-04 566888 500 224 36 240 +137.37 ± 12.15 0 3 59 185 3 +330.23 ± 44.94
481817 ncm-dbt-01 583740 500 225 46 229 +130.14 ± 11.99 0 2 69 177 2 +306.84 ± 41.23
481816 ncm-dbt-05 601001 500 229 44 227 +134.95 ± 12.64 0 2 67 175 6 +312.48 ± 41.9
481815 ncm-dbt-02 586858 500 228 41 231 +136.56 ± 13.36 0 4 63 175 8 +312.48 ± 43.44
481814 ncm-dbt-04 566257 500 223 40 237 +133.34 ± 13.63 1 3 65 174 7 +306.84 ± 42.73
481813 ncm-dbt-03 575232 500 232 36 232 +143.89 ± 12.3 0 1 59 183 7 +342.85 ± 44.76
481812 ncm-dbt-01 584411 500 225 41 234 +134.15 ± 12.27 0 1 69 175 5 +312.48 ± 41.11
481811 ncm-dbt-02 593109 500 230 48 222 +132.54 ± 13.83 0 7 61 175 7 +301.33 ± 44.13
481810 ncm-dbt-05 600380 500 228 31 241 +144.71 ± 11.38 0 2 51 195 2 +363.2 ± 48.51
481809 ncm-dbt-03 574825 500 221 39 240 +132.54 ± 12.71 0 4 64 178 4 +309.64 ± 43.08
481808 ncm-dbt-04 567640 500 229 26 245 +149.68 ± 11.56 0 2 47 197 4 +377.87 ± 50.67
481807 ncm-dbt-01 585464 500 213 41 246 +124.6 ± 13.09 0 4 75 166 5 +280.42 ± 39.57
481806 ncm-dbt-05 605523 500 228 36 236 +140.62 ± 12.02 0 2 58 186 4 +339.63 ± 45.29
481805 ncm-dbt-02 592288 500 215 31 254 +134.15 ± 12.27 0 1 69 175 5 +312.48 ± 41.11
481804 ncm-dbt-03 579496 500 227 36 237 +139.81 ± 12.05 0 3 56 188 3 +339.63 ± 46.2
481803 ncm-dbt-04 568474 500 230 37 233 +141.43 ± 11.55 0 0 61 185 4 +342.85 ± 43.79
481802 ncm-dbt-01 584453 500 226 35 239 +139.81 ± 12.05 0 2 59 185 4 +336.46 ± 44.87
481801 ncm-dbt-02 590739 500 238 41 221 +144.71 ± 13.08 0 3 56 182 9 +339.63 ± 46.2
481800 ncm-dbt-05 603321 500 228 32 240 +143.89 ± 11.19 0 0 57 190 3 +356.21 ± 45.43
481799 ncm-dbt-04 563939 500 231 37 232 +142.25 ± 12.58 0 1 62 179 8 +333.32 ± 43.57
481798 ncm-dbt-03 569949 500 216 31 253 +134.95 ± 12.84 0 5 59 182 4 +318.25 ± 44.96
481797 ncm-dbt-01 583950 500 227 40 233 +136.56 ± 12.18 0 2 63 181 4 +324.17 ± 43.32
481796 ncm-dbt-02 590481 500 232 37 231 +143.07 ± 12.12 0 1 59 184 6 +342.85 ± 44.76
481795 ncm-dbt-04 568593 500 226 48 226 +129.35 ± 12.41 0 0 78 166 6 +293.28 ± 38.26
481794 ncm-dbt-05 601580 500 230 35 235 +143.07 ± 12.75 0 2 59 181 8 +336.46 ± 44.87
481793 ncm-dbt-01 582778 500 230 35 235 +143.07 ± 12.95 0 3 57 182 8 +336.46 ± 45.77
481792 ncm-dbt-03 577930 500 225 33 242 +140.62 ± 12.44 0 5 51 191 3 +342.85 ± 48.46
481791 ncm-dbt-02 587579 500 228 50 222 +129.35 ± 13.36 0 4 71 168 7 +290.66 ± 40.76
481790 ncm-dbt-03 576864 500 225 48 227 +128.55 ± 13.01 0 1 79 162 8 +285.49 ± 38.15
481789 ncm-dbt-01 585295 500 216 42 242 +126.17 ± 12.49 0 2 76 168 4 +288.06 ± 39.11
481788 ncm-dbt-04 570749 500 220 32 248 +137.37 ± 12.15 0 3 59 185 3 +330.23 ± 44.94
481787 ncm-dbt-05 619409 500 229 34 237 +143.07 ± 12.54 0 3 55 186 6 +342.85 ± 46.64

Commit

Commit ID fd3c762f6dabfafb6c4f6040989698cdedda1e4e
Author anematode
Date 2026-08-01 04:46:17 UTC
Improved Linux shared memory implementation Our existing Linux shm implementation has worked quite well since its introduction after SF 17.1, for example substantially improving fishtest throughput. It does have a few pain points: - /dev/shm needs to have enough space for the network, some 100 MB; - some of the filesystem operations are racy, so sharing can non-deterministically fail; - the network is never cleaned up on SIGKILL. Obviously that's the fault of the user, but OpenBench uses SIGKILL, because some engines misbehave. This prototype is a fleshed-out version of Sopel's comment https://github.com/official-stockfish/Stockfish/pull/6979#issuecomment-4986789088 ## The implementation As usual we derive the shared memory name from the network contents, executable path and the NUMA node. Fishes rendezvous at a shared folder `/tmp/stockfish-[uid]/sfshm_...`, which has the following structure: ``` /tmp/stockfish-[uid]/sfshm_... ├─ init_lock ├─ [pid1].sock │ ... └─ [pid2].sock ``` An anonymous file containing the network is first created, sized, and initialized via `memfd_create` by a unique instance of Stockfish. This creator instance then sends the file descriptor using Unix sockets to other Stockfish instances. Each of those instances is also capable of sending the memfd to any other instance, so if the original creator instance exits, new instances can still receive access. More specifically, all *initialized* shared memory instances have a background thread (see `make_server_thread`) which listens to the socket at `/tmp/stockfish-[uid]/sfshm_.../[pid].sock`. When a requestor sends a message to this socket, the background thread replies with the network memfd. The requestor can then map the fd, sharing the underlying memory with the other instances. ### Initialization (`SharedMemory::open`) The implementation first `flock`s the `init_lock` file to get an `InitLock`. While holding the lock, it: - enumerates all sockets in the shared folder; - attempts to receive the memfd from each of those sockets, stopping on the first success. (We also delete sockets that are found to belong to dead processes.) If a memfd is received, it is mapped and the lock is released. If no memfd is found, then this process is the creator. We continue to hold the lock, call `memfd_create` and initialize it with the network (decompressed from disk). We then open the socket (guaranteed to have a unique name using our PID), and spawn the background server thread that listens on that socket. Finally, we release the lock. ### De-initialization When a `SharedMemory<T>` is closed, the background thread is joined, the memory is unmapped, and file descriptors are closed. We also unlink the `.sock` file. When *exiting* the program, we skip joining the background thread and unmapping memory because these actions are unnecessary and could cause problems if called in an exit or signal handler. ## Bookkeeping Passed non-regression STC LLR: 3.04 (-2.94,2.94) <-1.75,0.25> Total: 252192 W: 65179 L: 65187 D: 121826 Ptnml(0-2): 549, 26214, 72561, 26240, 532 https://tests.stockfishchess.org/tests/view/6a63b2dac054e285ae0287f3 Fixes #6977 closes https://github.com/official-stockfish/Stockfish/pull/6988 No functional change
Copyright 2011–2026 Next Chess Move LLC