The Era of Teranode per second movegeneration is here - Gigantua Warp

Discussion of chess software programming and technical issues.

Moderator: Ras

dangi12012
Posts: 1069
Joined: Tue Apr 28, 2020 10:03 pm
Full name: Daniel Infuehr

The Era of Teranode per second movegeneration is here - Gigantua Warp

Post by dangi12012 »

Hello chess community,

Daniel here. In 2021 I created the fastest movegenerator at that time.
I never stopped working on movegeneration, and it was pretty clear for me that the scaling on CPUs is very limited. Mostly due to memory bandwidth, and scaling stopping with AVX512, later AVX10. Since 2022 I have been working on a gpu movegenerator nonstop. Which is now ready to present.

GPUs dont have pext instruction for movegeneration, and the memory model is very different to CPU movegeneration. Almost none of the speed approaches map to the gpu. Most importantly warps (32 threads) have to execute in unison (non divergent). Also arrays are very expensive if the compiler cant prove indices at compiletime.

So what is required - not optional, is branchfree, non divergent code without any device memory footprint (absolute minimum register usage in nsight compute). U64 is also a footgun with large chess trees, meaning device resident code has to handle u128 or even more in a manner that is performant.

Forget materializing a movelist, that will thrash shared memory (which is 10x faster than global memory, but that is much too slow)
I must have read the nvidia developer guide 20x from beginning to end in the past years.
A few ideas - 90° rotated QBB. This is still make - unmake engine - maintaining a board in registers. No arrays on device code except shared memory.
cooperative groups. Also no need for block level aggregation, like prefix sums etc. Work is truly parallel.

Also color free chess. It is never "white" vs "white" it is "us" vs "them". The player to move, moves always in the same direction, and between each move the board is (cuda syntax) reverted via brevll. This saves many different masks and shifts, which are now const resident, and non color dependent. In that sense, the color to move template, is obsolete, and became a different paradigm where its not needed.

Before gigantua the fastest known movegenerator was 350MNPS. I raised this bar to 2.2 GNPS per thread. It is time to raise this bar again. I thought gpus can reach 100 GNPS, but I was wrong. That barrier was crossed The right exponent for nodes calculated per second BASE is TNPS. Without the TT.

Presenting Gigantua-warp (gpu engine)

Single RTX 3080 - no host ram taken. "root 2308.4" That is the speed without TT. That is 2308 Billion Nodes per second - 2 TNPS on a 3080 from 2020:

Code: Select all

run config: fen="rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1" depth=11
[2026-07-31 13:08:01:075] - level 1 returned
[2026-07-31 13:08:01:076] - Perft 1 20 120.7ms 0.000 GNodes/s
[2026-07-31 13:08:01:077] - expand(gpu): 20 -> 400 children, 400 unique
[2026-07-31 13:08:01:077] - level 2 returned
[2026-07-31 13:08:01:077] - Perft 2 400 122.3ms 0.000 GNodes/s
[2026-07-31 13:08:01:079] - expand(gpu): 400 -> 8902 children, 5362 unique
[2026-07-31 13:08:01:079] - level 3 returned
[2026-07-31 13:08:01:080] - Perft 3 8902 124.8ms 0.000 GNodes/s
[2026-07-31 13:08:01:084] - expand(gpu): 5362 -> 118522 children, 72078 unique
[2026-07-31 13:08:01:085] - level 4 returned
[2026-07-31 13:08:01:086] - Perft 4 197281 130.9ms 0.002 GNodes/s
[2026-07-31 13:08:01:108] - expand(gpu): 72078 -> 1797389 children, 822518 unique
[2026-07-31 13:08:01:124] - level 5 returned
[2026-07-31 13:08:01:126] - Perft 5 4865609 171.6ms 0.028 GNodes/s
[2026-07-31 13:08:01:320] - expand(gpu): 822518 -> 20197183 children, 9417683 unique
[2026-07-31 13:08:01:384] - level 6 returned
[2026-07-31 13:08:01:404] - Perft 6 119060324 449.1ms 0.265 GNodes/s
[2026-07-31 13:08:01:404] - Kernel execution time: 449.255700 milliseconds
[2026-07-31 13:08:01:404] - weighted frontier: depth 6, 9417683 unique roots (perft(6) = 119060324)
[2026-07-31 13:08:01:646] - [tt] tier sizing: 21761696/174093572/174093574 slots (5.67 GB tables, pow2 shape 24/27/27) scheme=fastrange f=1.30
[2026-07-31 13:08:01:929] - frontier staging: roots 2MB large pages, weights 2MB large pages
[2026-07-31 13:08:01:991] - Threads: 174080 (1360 x 128), Depth=5
[2026-07-31 13:08:02:095] -   counting... 0.8% 71922/9417683 roots 0.1s elapsed  12570.4 GN/s root  341.8 ETA     --
[2026-07-31 13:08:04:047] -   counting... 5.3% 500996/9417683 roots 2.1s elapsed  62035.6 GN/s root 2941.6 ETA  16.1s
[2026-07-31 13:08:05:998] -   counting... 9.6% 906180/9417683 roots 4.0s elapsed  55056.3 GN/s root 3171.2 ETA  18.9s
[2026-07-31 13:08:08:061] -   counting... 13.7% 1293082/9417683 roots 6.1s elapsed  54167.3 GN/s root 3120.8 ETA  21.9s
[2026-07-31 13:08:10:013] -   counting... 17.4% 1641718/9417683 roots 8.0s elapsed  51507.3 GN/s root 3193.2 ETA  24.8s
[2026-07-31 13:08:12:075] -   counting... 21.3% 2004898/9417683 roots 10.1s elapsed  49897.6 GN/s root 3119.1 ETA  27.2s
[2026-07-31 13:08:14:025] -   counting... 24.6% 2314336/9417683 roots 12.0s elapsed  48041.5 GN/s root 3064.3 ETA  29.8s
[2026-07-31 13:08:16:089] -   counting... 27.8% 2619240/9417683 roots 14.1s elapsed  45805.9 GN/s root 2981.5 ETA  32.2s
[2026-07-31 13:08:18:043] -   counting... 30.9% 2912664/9417683 roots 16.1s elapsed  44710.7 GN/s root 2918.3 ETA  33.7s
[2026-07-31 13:08:19:996] -   counting... 34.0% 3204738/9417683 roots 18.0s elapsed  43412.1 GN/s root 2851.5 ETA  79.4s
[2026-07-31 13:08:22:056] -   counting... 37.2% 3506324/9417683 roots 20.1s elapsed  42369.4 GN/s root 2784.7 ETA  78.6s
[2026-07-31 13:08:24:010] -   counting... 39.9% 3761290/9417683 roots 22.0s elapsed  41078.7 GN/s root 2720.4 ETA  76.9s
[2026-07-31 13:08:26:072] -   counting... 42.7% 4021764/9417683 roots 24.1s elapsed  40259.7 GN/s root 2667.2 ETA  76.1s
[2026-07-31 13:08:28:023] -   counting... 45.0% 4241082/9417683 roots 26.0s elapsed  38987.2 GN/s root 2622.0 ETA  75.2s
[2026-07-31 13:08:30:084] -   counting... 47.8% 4498334/9417683 roots 28.1s elapsed  38486.2 GN/s root 2588.2 ETA  73.3s
[2026-07-31 13:08:32:038] -   counting... 50.1% 4718630/9417683 roots 30.0s elapsed  37762.6 GN/s root 2569.7 ETA  71.4s
[2026-07-31 13:08:33:993] -   counting... 52.2% 4915496/9417683 roots 32.0s elapsed  36662.5 GN/s root 2535.3 ETA  71.7s
[2026-07-31 13:08:36:052] -   counting... 54.6% 5139482/9417683 roots 34.1s elapsed  36114.6 GN/s root 2504.0 ETA  69.2s
[2026-07-31 13:08:38:005] -   counting... 56.6% 5331624/9417683 roots 36.0s elapsed  35418.7 GN/s root 2474.7 ETA  69.2s
[2026-07-31 13:08:40:065] -   counting... 58.6% 5515898/9417683 roots 38.1s elapsed  34507.9 GN/s root 2441.8 ETA  67.8s
[2026-07-31 13:08:42:017] -   counting... 60.2% 5671912/9417683 roots 40.0s elapsed  33461.4 GN/s root 2409.6 ETA  69.1s
[2026-07-31 13:08:44:082] -   counting... 62.2% 5862210/9417683 roots 42.1s elapsed  33107.7 GN/s root 2401.8 ETA  66.5s
[2026-07-31 13:08:46:034] -   counting... 64.1% 6032344/9417683 roots 44.0s elapsed  32708.2 GN/s root 2388.4 ETA  65.7s
[2026-07-31 13:08:48:091] -   counting... 65.8% 6199884/9417683 roots 46.1s elapsed  32210.2 GN/s root 2380.8 ETA  63.6s
[2026-07-31 13:08:50:053] -   counting... 67.5% 6354486/9417683 roots 48.1s elapsed  31700.6 GN/s root 2380.4 ETA  63.0s
[2026-07-31 13:08:52:014] -   counting... 69.0% 6496116/9417683 roots 50.0s elapsed  31071.9 GN/s root 2364.3 ETA  61.3s
[2026-07-31 13:08:54:075] -   counting... 70.9% 6680822/9417683 roots 52.1s elapsed  30437.3 GN/s root 2346.4 ETA  58.4s
[2026-07-31 13:08:56:029] -   counting... 73.1% 6883512/9417683 roots 54.0s elapsed  29955.7 GN/s root 2308.4 ETA  53.7s
[2026-07-31 13:08:58:093] -   counting... 75.0% 7065444/9417683 roots 56.1s elapsed  29571.0 GN/s root 2274.0 ETA  51.3s
[2026-07-31 13:09:00:051] -   counting... 76.7% 7221014/9417683 roots 58.1s elapsed  29090.2 GN/s root 2246.2 ETA  48.4s
[2026-07-31 13:09:02:005] -   counting... 78.5% 7389164/9417683 roots 60.0s elapsed  28727.0 GN/s root 2215.9 ETA  45.5s
[2026-07-31 13:09:04:068] -   counting... 80.3% 7566628/9417683 roots 62.1s elapsed  28363.7 GN/s root 2189.1 ETA  41.6s
[2026-07-31 13:09:06:023] -   counting... 82.0% 7721916/9417683 roots 64.0s elapsed  28011.3 GN/s root 2168.2 ETA  29.0s
[2026-07-31 13:09:08:086] -   counting... 83.7% 7879308/9417683 roots 66.1s elapsed  27615.1 GN/s root 2141.9 ETA  24.0s
[2026-07-31 13:09:10:037] -   counting... 85.1% 8018812/9417683 roots 68.0s elapsed  27228.2 GN/s root 2120.3 ETA  21.0s
[2026-07-31 13:09:12:096] -   counting... 86.8% 8174386/9417683 roots 70.1s elapsed  26905.6 GN/s root 2102.7 ETA  17.8s
[2026-07-31 13:09:14:047] -   counting... 88.2% 8306258/9417683 roots 72.1s elapsed  26517.2 GN/s root 2088.7 ETA  15.4s
[2026-07-31 13:09:15:996] -   counting... 89.5% 8426448/9417683 roots 74.0s elapsed  26156.8 GN/s root 2074.7 ETA  13.7s
[2026-07-31 13:09:18:058] -   counting... 90.8% 8554082/9417683 roots 76.1s elapsed  25805.9 GN/s root 2061.7 ETA  12.0s
[2026-07-31 13:09:20:014] -   counting... 92.0% 8666952/9417683 roots 78.0s elapsed  25452.2 GN/s root 2054.8 ETA  10.5s
[2026-07-31 13:09:22:072] -   counting... 93.2% 8780554/9417683 roots 80.1s elapsed  25024.3 GN/s root 2045.2 ETA   8.9s
[2026-07-31 13:09:24:024] -   counting... 94.4% 8893200/9417683 roots 82.0s elapsed  24664.4 GN/s root 2031.5 ETA   7.3s
[2026-07-31 13:09:26:087] -   counting... 95.7% 9014292/9417683 roots 84.1s elapsed  24314.5 GN/s root 2018.2 ETA   5.7s
[2026-07-31 13:09:28:036] -   counting... 96.8% 9120950/9417683 roots 86.0s elapsed  23970.4 GN/s root 2010.1 ETA   4.4s
[2026-07-31 13:09:30:095] -   counting... 98.0% 9226228/9417683 roots 88.1s elapsed  23584.1 GN/s root 1996.6 ETA   2.9s
[2026-07-31 13:09:32:048] -   counting... 99.4% 9357358/9417683 roots 90.1s elapsed  23204.8 GN/s root 1980.6 ETA   0.9s
[2026-07-31 13:09:33:459] - exact ladder: 4 leg(s) on 1 worker(s)
[2026-07-31 13:09:33:459] -   leg 0: primary frontier, 9417683 roots at ply 6, endDepth 3 -> produces perft(9)
[2026-07-31 13:09:33:459] -   leg 1: primary frontier, 9417683 roots at ply 6, endDepth 4 -> produces perft(10)
[2026-07-31 13:09:33:459] -   leg 2: snapshot frontier, 72078 roots at ply 4, endDepth 3 -> produces perft(7)
[2026-07-31 13:09:33:459] -   leg 3: snapshot frontier, 822518 roots at ply 5, endDepth 3 -> produces perft(8)
[2026-07-31 13:09:33:460] - exact ladder: leg 0 START (ply 9, endDepth 3) on gpu0 - 9417683 roots in 9 chunk(s)
[2026-07-31 13:09:34:383] -   ladder leg 0 (ply 9): 100.0%  9417683/9417683 roots  chunk 9/9    0.9s elapsed (kernel 0.3s)  ETA     --
[2026-07-31 13:09:34:384] - exact ladder: leg 0 DONE (ply 9) on gpu0 - wall 0.923 s, kernel 0.258 s
[2026-07-31 13:09:34:384] - exact ladder: leg 1 START (ply 10, endDepth 4) on gpu0 - 9417683 roots in 9 chunk(s)
[2026-07-31 13:09:36:477] -   ladder leg 1 (ply 10):  44.5%  4194304/9417683 roots  chunk 4/9    2.1s elapsed (kernel 1.8s)  ETA   2.6s
[2026-07-31 13:09:39:083] -   ladder leg 1 (ply 10):  89.1%  8388608/9417683 roots  chunk 8/9    4.7s elapsed (kernel 4.1s)  ETA   0.6s
[2026-07-31 13:09:39:877] -   ladder leg 1 (ply 10): 100.0%  9417683/9417683 roots  chunk 9/9    5.5s elapsed (kernel 4.8s)  ETA     --
[2026-07-31 13:09:39:877] - exact ladder: leg 1 DONE (ply 10) on gpu0 - wall 5.494 s, kernel 4.847 s
[2026-07-31 13:09:39:878] - exact ladder: leg 2 START (ply 7, endDepth 3) on gpu0 - 72078 roots in 1 chunk(s)
[2026-07-31 13:09:39:887] -   ladder leg 2 (ply 7): 100.0%  72078/72078 roots  chunk 1/1    0.0s elapsed (kernel 0.0s)  ETA     --
[2026-07-31 13:09:39:888] - exact ladder: leg 2 DONE (ply 7) on gpu0 - wall 0.010 s, kernel 0.002 s
[2026-07-31 13:09:39:888] - exact ladder: leg 3 START (ply 8, endDepth 3) on gpu0 - 822518 roots in 1 chunk(s)
[2026-07-31 13:09:39:985] -   ladder leg 3 (ply 8): 100.0%  822518/822518 roots  chunk 1/1    0.1s elapsed (kernel 0.0s)  ETA     --
[2026-07-31 13:09:39:985] - exact ladder: leg 3 DONE (ply 8) on gpu0 - wall 0.097 s, kernel 0.021 s
[2026-07-31 13:09:39:985] - exact ladder: all 4 leg(s) done - wall 6.527 s, kernel 5.129 s reported
[2026-07-31 13:09:39:997] - Perft 7 3195901860 (from the primary frontier)
[2026-07-31 13:09:39:998] - Perft 8 84998978956 (from the primary frontier)
[2026-07-31 13:09:39:998] - Perft 9 2439530234167 (from the primary frontier)
[2026-07-31 13:09:39:998] - Perft 10 69352859712417 (from the primary frontier)
[2026-07-31 13:09:39:998] - Kernel execution time: 91886.513512 milliseconds
[2026-07-31 13:09:39:998] - Kernel finished
[2026-07-31 13:09:39:998] - Total 1 20
[2026-07-31 13:09:39:998] - Total 2 400
[2026-07-31 13:09:39:998] - Total 3 8902
[2026-07-31 13:09:39:998] - Total 4 197281
[2026-07-31 13:09:39:998] - Total 5 4865609
[2026-07-31 13:09:39:998] - Total 6 119060324
[2026-07-31 13:09:39:998] - Total 7 3195901860
[2026-07-31 13:09:39:999] - Total 8 84998978956
[2026-07-31 13:09:39:999] - Total 9 2439530234167
[2026-07-31 13:09:39:999] - Total 10 69352859712417
[2026-07-31 13:09:39:999] - Perft 11 2097651003696806 91886.5ms 22828.714 GNodes/s
8x 5090 - Kiwipete P11 - Words First Release - 1007981.328 GN/s root 60169.9 GN/s.
In words - 1 Million+ GN/s TT, 60 thousand billion nodes base perf ~ 7 thousand billion moves per card per second.

Code: Select all

[2026-07-31 11:33:09:546] - multi-GPU: 8 devices, 472514079 roots, chunk 7383032
[2026-07-31 11:33:09:547] - [gossip] OFF (default, pending re-earned dual-GPU A/B verdicts; CHESS_TT_GOSSIP=1 to enable)
[2026-07-31 11:34:17:800] -   counting... 14.0% 59064256/472514079 roots 68.3s elapsed 294647.5 GN/s root 13142.9 ETA 418.7s (gpu1 done chunk at 22149096)
[2026-07-31 11:34:23:796] -   counting... 15.4% 66447288/472514079 roots 74.2s elapsed 597959.4 GN/s root 25407.4 ETA 408.1s (gpu0 done chunk at 0)
[2026-07-31 11:34:36:790] -   counting... 17.2% 73830320/472514079 roots 87.2s elapsed 718927.5 GN/s root 32967.6 ETA 420.0s (gpu4 done chunk at 29532128)
[2026-07-31 11:34:40:259] -   counting... 18.7% 81213352/472514079 roots 90.7s elapsed 888768.0 GN/s root 42563.4 ETA 393.6s (gpu5 done chunk at 36915160)
[2026-07-31 11:34:41:029] -   counting... 20.5% 88596384/472514079 roots 91.5s elapsed 1143660.4 GN/s root 55152.2 ETA 354.7s (gpu6 done chunk at 44298192)
[2026-07-31 11:34:47:375] -   counting... 23.4% 95979416/472514079 roots 97.8s elapsed 1294082.4 GN/s root 63043.3 ETA 320.2s (gpu2 done chunk at 7383032)
[2026-07-31 11:34:58:019] -   counting... 25.8% 103362448/472514079 roots 108.5s elapsed 1346282.8 GN/s root 66252.0 ETA 311.2s (gpu3 done chunk at 14766064)
[2026-07-31 11:35:03:555] -   counting... 27.8% 110745480/472514079 roots 114.0s elapsed 1478256.8 GN/s root 74673.8 ETA 295.4s (gpu7 done chunk at 51681224)
[2026-07-31 11:35:55:883] -   counting... 29.6% 118128512/472514079 roots 166.3s elapsed 1141088.8 GN/s root 57509.0 ETA 395.4s (gpu0 done chunk at 66447288)
[2026-07-31 11:36:29:803] -   counting... 31.1% 125511544/472514079 roots 200.3s elapsed 1036932.5 GN/s root 53583.4 ETA 443.4s (gpu1 done chunk at 59064256)
[2026-07-31 11:36:31:366] -   counting... 32.6% 132894576/472514079 roots 201.8s elapsed 1126915.5 GN/s root 58958.8 ETA 417.3s (gpu4 done chunk at 73830320)
[2026-07-31 11:36:32:091] -   counting... 34.3% 140277608/472514079 roots 202.5s elapsed 1306162.9 GN/s root 64027.6 ETA 387.8s (gpu6 done chunk at 88596384)
[2026-07-31 11:36:50:006] -   counting... 35.8% 147660640/472514079 roots 220.5s elapsed 1298424.2 GN/s root 63669.1 ETA 395.1s (gpu5 done chunk at 81213352)
[2026-07-31 11:36:55:629] -   counting... 37.2% 155043672/472514079 roots 226.1s elapsed 1360324.4 GN/s root 66810.2 ETA 381.4s (gpu7 done chunk at 110745480)
[2026-07-31 11:37:01:502] -   counting... 38.9% 162426704/472514079 roots 232.0s elapsed 1473883.9 GN/s root 70205.1 ETA 364.6s (gpu2 done chunk at 95979416)
[2026-07-31 11:37:08:727] -   counting... 40.4% 169809736/472514079 roots 239.2s elapsed 1531668.0 GN/s root 72394.7 ETA 353.6s (gpu3 done chunk at 103362448)
[2026-07-31 11:38:12:774] -   counting... 42.0% 177192768/472514079 roots 303.2s elapsed 1272358.3 GN/s root 60909.0 ETA 419.1s (gpu0 done chunk at 118128512)
[2026-07-31 11:38:46:350] -   counting... 43.4% 184575800/472514079 roots 336.8s elapsed 1218804.1 GN/s root 58651.4 ETA 438.4s (gpu4 done chunk at 132894576)
[2026-07-31 11:38:51:548] -   counting... 45.1% 191958832/472514079 roots 342.0s elapsed 1256700.8 GN/s root 61097.2 ETA 415.7s (gpu1 done chunk at 125511544)
[2026-07-31 11:39:13:615] -   counting... 46.6% 199341864/472514079 roots 364.1s elapsed 1246229.5 GN/s root 61311.0 ETA 416.6s (gpu6 done chunk at 140277608)
[2026-07-31 11:39:14:947] -   counting... 48.4% 206724896/472514079 roots 365.4s elapsed 1310388.2 GN/s root 64782.8 ETA 390.3s (gpu7 done chunk at 155043672)
[2026-07-31 11:39:20:766] -   counting... 50.0% 214107928/472514079 roots 371.2s elapsed 1341358.9 GN/s root 66698.9 ETA 370.7s (gpu3 done chunk at 169809736)
[2026-07-31 11:39:31:911] -   counting... 51.6% 221490960/472514079 roots 382.4s elapsed 1355480.7 GN/s root 68120.0 ETA 359.1s (gpu5 done chunk at 147660640)
[2026-07-31 11:39:42:551] -   counting... 53.0% 228873992/472514079 roots 393.0s elapsed 1377451.7 GN/s root 69853.2 ETA 348.4s (gpu2 done chunk at 162426704)
[2026-07-31 11:40:41:254] -   counting... 54.6% 236257024/472514079 roots 451.7s elapsed 1236558.4 GN/s root 63137.8 ETA 375.0s (gpu0 done chunk at 177192768)
[2026-07-31 11:40:53:384] -   counting... 56.1% 243640056/472514079 roots 463.8s elapsed 1247826.3 GN/s root 63799.5 ETA 362.8s (gpu4 done chunk at 184575800)
[2026-07-31 11:41:20:257] -   counting... 57.7% 251023088/472514079 roots 490.7s elapsed 1217727.5 GN/s root 62344.4 ETA 360.0s (gpu6 done chunk at 199341864)
[2026-07-31 11:41:28:689] -   counting... 59.1% 258406120/472514079 roots 499.1s elapsed 1233955.1 GN/s root 63502.5 ETA 346.0s (gpu1 done chunk at 191958832)
[2026-07-31 11:41:40:267] -   counting... 60.4% 265789152/472514079 roots 510.7s elapsed 1244538.7 GN/s root 64079.4 ETA 335.0s (gpu7 done chunk at 206724896)
[2026-07-31 11:42:03:707] -   counting... 62.1% 273172184/472514079 roots 534.2s elapsed 1234114.9 GN/s root 63835.6 ETA 326.5s (gpu3 done chunk at 214107928)
[2026-07-31 11:42:04:774] -   counting... 63.6% 280555216/472514079 roots 535.2s elapsed 1274396.7 GN/s root 66042.8 ETA 306.5s (gpu2 done chunk at 228873992)
[2026-07-31 11:42:30:653] -   counting... 65.9% 287938248/472514079 roots 561.1s elapsed 1251193.0 GN/s root 65170.3 ETA 290.8s (gpu5 done chunk at 221490960)
[2026-07-31 11:43:18:387] -   counting... 68.1% 295321280/472514079 roots 608.8s elapsed 1189107.4 GN/s root 62062.2 ETA 285.6s (gpu4 done chunk at 243640056)
[2026-07-31 11:43:20:585] -   counting... 69.7% 302704312/472514079 roots 611.0s elapsed 1216638.2 GN/s root 63747.8 ETA 265.9s (gpu0 done chunk at 236257024)
[2026-07-31 11:43:47:108] -   counting... 71.2% 310087344/472514079 roots 637.6s elapsed 1200724.6 GN/s root 62926.4 ETA 257.3s (gpu7 done chunk at 265789152)
[2026-07-31 11:44:04:435] -   counting... 72.7% 317470376/472514079 roots 654.9s elapsed 1201685.1 GN/s root 63359.1 ETA 245.9s (gpu6 done chunk at 251023088)
[2026-07-31 11:44:30:942] -   counting... 74.1% 324853408/472514079 roots 681.4s elapsed 1182918.2 GN/s root 62755.1 ETA 237.7s (gpu1 done chunk at 258406120)
[2026-07-31 11:44:39:641] -   counting... 75.5% 332236440/472514079 roots 690.1s elapsed 1198725.2 GN/s root 63758.0 ETA 223.7s (gpu3 done chunk at 273172184)
[2026-07-31 11:44:46:033] -   counting... 77.1% 339619472/472514079 roots 696.5s elapsed 1230836.4 GN/s root 64791.0 ETA 207.2s (gpu2 done chunk at 280555216)
[2026-07-31 11:45:39:622] -   counting... 79.0% 347002504/472514079 roots 750.1s elapsed 1183726.1 GN/s root 61718.7 ETA 199.2s (gpu5 done chunk at 287938248)
[2026-07-31 11:46:43:710] -   counting... 80.9% 354385536/472514079 roots 814.2s elapsed 1121255.8 GN/s root 58576.2 ETA 191.7s (gpu4 done chunk at 295321280)
[2026-07-31 11:46:45:014] -   counting... 82.4% 361768568/472514079 roots 815.5s elapsed 1145688.0 GN/s root 59993.5 ETA 174.1s (gpu0 done chunk at 302704312)
[2026-07-31 11:47:03:006] -   counting... 83.7% 368690162/472514079 roots 833.5s elapsed 1144747.3 GN/s root 60169.9 ETA 162.6s (gpu7 done chunk at 310087344)
[2026-07-31 11:47:22:689] -   counting... 84.7% 375179156/472514079 roots 853.1s elapsed 1138501.9 GN/s root 59953.0 ETA 153.9s (gpu3 done chunk at 332236440)
[2026-07-31 11:47:23:289] -   counting... 85.7% 381262588/472514079 roots 853.7s elapsed 1164402.6 GN/s root 61087.2 ETA 142.2s (gpu2 done chunk at 339619472)
[2026-07-31 11:47:32:108] -   counting... 86.5% 386965806/472514079 roots 862.6s elapsed 1176591.4 GN/s root 61947.8 ETA 134.3s (gpu6 done chunk at 317470376)
[2026-07-31 11:47:48:747] -   counting... 88.0% 392312573/472514079 roots 879.2s elapsed 1175655.3 GN/s root 62160.6 ETA 120.1s (gpu1 done chunk at 324853408)
[2026-07-31 11:48:56:012] -   counting... 89.1% 397325167/472514079 roots 946.5s elapsed 1119119.8 GN/s root 58954.5 ETA 115.8s (gpu5 done chunk at 347002504)
[2026-07-31 11:49:30:451] -   counting... 90.0% 402024474/472514079 roots 980.9s elapsed 1090387.2 GN/s root 57783.8 ETA 109.5s (gpu2 done chunk at 381262588)
[2026-07-31 11:49:42:048] -   counting... 90.8% 406430074/472514079 roots 992.5s elapsed 1095045.9 GN/s root 58238.5 ETA 100.4s (gpu0 done chunk at 361768568)
[2026-07-31 11:49:43:060] -   counting... 91.7% 410560324/472514079 roots 993.5s elapsed 1106466.8 GN/s root 59097.8 ETA  89.6s (gpu3 done chunk at 375179156)
[2026-07-31 11:49:48:581] -   counting... 92.5% 414432433/472514079 roots 999.0s elapsed 1119673.8 GN/s root 59627.1 ETA  81.2s (gpu6 done chunk at 386965806)
[2026-07-31 11:49:49:666] -   counting... 93.2% 418062535/472514079 roots 1000.1s elapsed 1132712.2 GN/s root 60634.2 ETA  73.2s (gpu7 done chunk at 368690162)
[2026-07-31 11:50:01:931] -   counting... 93.9% 421465756/472514079 roots 1012.4s elapsed 1137929.9 GN/s root 61050.9 ETA  66.1s (gpu4 done chunk at 354385536)
[2026-07-31 11:50:05:068] -   counting... 94.4% 424656276/472514079 roots 1015.5s elapsed 1148150.1 GN/s root 61610.7 ETA  59.8s (gpu1 done chunk at 392312573)
[2026-07-31 11:51:09:474] -   counting... 95.0% 427647388/472514079 roots 1079.9s elapsed 1089611.9 GN/s root 58602.1 ETA  56.5s (gpu5 done chunk at 397325167)
[2026-07-31 11:51:22:099] -   counting... 95.5% 430451556/472514079 roots 1092.6s elapsed 1086572.3 GN/s root 58526.2 ETA  51.4s (gpu2 done chunk at 402024474)
[2026-07-31 11:51:31:082] -   counting... 96.0% 433080463/472514079 roots 1101.5s elapsed 1086820.5 GN/s root 58566.5 ETA  45.5s (gpu7 done chunk at 418062535)
[2026-07-31 11:51:37:210] -   counting... 96.3% 435545064/472514079 roots 1107.7s elapsed 1091482.5 GN/s root 58816.4 ETA  42.4s (gpu0 done chunk at 406430074)
[2026-07-31 11:51:38:341] -   counting... 96.5% 437855627/472514079 roots 1108.8s elapsed 1099540.4 GN/s root 59316.4 ETA  39.8s (gpu3 done chunk at 410560324)
[2026-07-31 11:51:41:470] -   counting... 96.7% 440021780/472514079 roots 1111.9s elapsed 1103969.0 GN/s root 59616.5 ETA  37.5s (gpu1 done chunk at 424656276)
[2026-07-31 11:51:44:331] -   counting... 97.0% 442052548/472514079 roots 1114.8s elapsed 1110078.3 GN/s root 60023.7 ETA  34.8s (gpu6 done chunk at 414432433)
[2026-07-31 11:51:53:233] -   counting... 97.3% 443956393/472514079 roots 1123.7s elapsed 1108952.5 GN/s root 60036.8 ETA  31.5s (gpu4 done chunk at 421465756)
[2026-07-31 12:00:10:350] - Kernel execution time: 1305071.746375 milliseconds
[2026-07-31 12:00:10:350] - Kernel finished
[2026-07-31 12:00:10:350] - Total 1 48
[2026-07-31 12:00:10:350] - Total 2 2039
[2026-07-31 12:00:10:350] - Total 3 97862
[2026-07-31 12:00:10:350] - Total 4 4085603
[2026-07-31 12:00:10:350] - Total 5 193690690
[2026-07-31 12:00:10:350] - Total 6 8031647685
[2026-07-31 12:00:10:350] - Total 7 374190009323
[2026-07-31 12:00:10:350] - Total 8 15493944087984
[2026-07-31 12:00:10:350] - Total 9 708027759953502
[2026-07-31 12:00:10:350] - Total 10 29344805396643919
[2026-07-31 12:00:10:350] - Perft 11 1315487952573035776 1305071.7ms 1007981.328 GNodes/s
I will share my full logs in the grand chess tree discord.

Dear chess community, this performance, is the new baseline for chess movegeneration. Scalable, host ram free up to ply 13.
The board structure itself can also be quite large, so attaching more metrics wont be too expensive either.

Architecture and P14, P15 times will be shared in due time.
P14 8x 5090 -

Code: Select all

[2026-07-31 01:33:49:665] -   counting... 99.6% 9147777024/9183507426 roots 5556.7s elapsed  44191.9 GN/s root 44191.9 ETA  21.7s
[2026-07-31 01:33:52:404] -   counting... 99.7% 9151971328/9183507426 roots 5559.4s elapsed  44187.4 GN/s root 44187.4 ETA  19.2s
[2026-07-31 01:33:55:418] -   counting... 99.7% 9156165632/9183507426 roots 5562.4s elapsed  44176.6 GN/s root 44176.6 ETA  16.6s
[2026-07-31 01:33:57:357] -   counting... 99.7% 9160359936/9183507426 roots 5564.4s elapsed  44176.3 GN/s root 44176.3 ETA  14.1s
[2026-07-31 01:33:59:201] -   counting... 99.8% 9164554240/9183507426 roots 5566.2s elapsed  44176.7 GN/s root 44176.7 ETA  11.5s
[2026-07-31 01:34:00:388] -   counting... 99.8% 9166730210/9183507426 roots 5567.4s elapsed  44176.7 GN/s root 44176.7 ETA  10.2s
[2026-07-31 01:34:00:830] -   counting... 99.9% 9170924514/9183507426 roots 5567.8s elapsed  44189.8 GN/s root 44189.8 ETA   7.6s
[2026-07-31 01:34:09:141] -   counting... 99.9% 9175118818/9183507426 roots 5576.1s elapsed  44141.4 GN/s root 44141.4 ETA   5.1s
[2026-07-31 01:34:11:742] -   counting... 100.0% 9179313122/9183507426 roots 5578.7s elapsed  44139.5 GN/s root 44139.5 ETA   2.5s
[2026-07-31 01:34:13:225] -   counting... 100.0% 9183507426/9183507426 roots 5580.2s elapsed  44146.9 GN/s root 44146.9 ETA     --
[2026-07-31 01:34:13:481] - rootdedup: streamed counting consumed 9183507426 roots (5492.475 s gpu)
[2026-07-31 01:34:13:482] - rootdedup: 988192872 -> 28668701726 children, 9183507426 unique (5917.359 s total)
[2026-07-31 01:34:13:937] - level 9 returned
[2026-07-31 01:34:13:937] - Perft 9 2439530234167 5969133.9ms 0.409 GNodes/s
[2026-07-31 01:34:14:336] - stream-count: folded 2190 chunk totals -> 61885021521585529237
[2026-07-31 01:34:13:937] - Kernel execution time: 5969134.016088 milliseconds
[2026-07-31 01:34:13:937] - weighted frontier: depth 9, 9183507426 unique roots (perft(9) = 2439530234167)
[2026-07-31 01:34:13:944] - frontier staging: roots 2MB transparent huge pages, weights 2MB transparent huge pages
[2026-07-31 01:34:14:369] - Perft 1 20
[2026-07-31 01:34:14:369] - Perft 2 400
[2026-07-31 01:34:14:369] - Perft 3 8902
[2026-07-31 01:34:14:369] - Perft 4 197281
[2026-07-31 01:34:14:369] - Perft 5 4865609
[2026-07-31 01:34:14:369] - Perft 6 119060324
[2026-07-31 01:34:14:369] - Perft 7 3195901860
[2026-07-31 01:34:14:369] - Perft 8 84998978956
[2026-07-31 01:34:14:369] - Perft 9 2439530234167
[2026-07-31 01:34:14:369] - Perft 14 61885021521585529237 5969134.0ms 10367504.123 GNodes/s
[2026-07-31 01:34:14:369] - target perft(14): 5969.134 s (cleared tt)
[2026-07-31 01:34:14:369] - [serve] vram free 5477 MB
[2026-07-31 01:34:14:369] - OK 61885021521585529237
Base chess iterations speed went from 350mnps to 2bnps to 5000bnps to 100% scalable 5000bnps due to obsessive effort to push that frontier as far as possible. It does not need exotic hardware. The future outlook is extremely good.

We have entered a truly golden era for computerchess.
Worlds-fastest-Bitboard-Chess-Movegenerator
Daniel Inführ - Software Developer
User avatar
Ajedrecista
Posts: 2261
Joined: Wed Jul 13, 2011 9:04 pm
Location: Madrid, Spain.

Re: The era of teranode per second move generation is here - Gigantua Warp.

Post by Ajedrecista »

Hello Daniel:
dangi12012 wrote: Fri Jul 31, 2026 2:33 pm[...]

Dear chess community, this performance, is the new baseline for chess movegeneration. Scalable, host ram free up to ply 13.
The board structure itself can also be quite large, so attaching more metrics wont be too expensive either.

Architecture and P14, P15 times will be shared in due time.
P14 8x 5090 -

Code: Select all

[2026-07-31 01:33:49:665] -   counting... 99.6% 9147777024/9183507426 roots 5556.7s elapsed  44191.9 GN/s root 44191.9 ETA  21.7s
[2026-07-31 01:33:52:404] -   counting... 99.7% 9151971328/9183507426 roots 5559.4s elapsed  44187.4 GN/s root 44187.4 ETA  19.2s
[2026-07-31 01:33:55:418] -   counting... 99.7% 9156165632/9183507426 roots 5562.4s elapsed  44176.6 GN/s root 44176.6 ETA  16.6s
[2026-07-31 01:33:57:357] -   counting... 99.7% 9160359936/9183507426 roots 5564.4s elapsed  44176.3 GN/s root 44176.3 ETA  14.1s
[2026-07-31 01:33:59:201] -   counting... 99.8% 9164554240/9183507426 roots 5566.2s elapsed  44176.7 GN/s root 44176.7 ETA  11.5s
[2026-07-31 01:34:00:388] -   counting... 99.8% 9166730210/9183507426 roots 5567.4s elapsed  44176.7 GN/s root 44176.7 ETA  10.2s
[2026-07-31 01:34:00:830] -   counting... 99.9% 9170924514/9183507426 roots 5567.8s elapsed  44189.8 GN/s root 44189.8 ETA   7.6s
[2026-07-31 01:34:09:141] -   counting... 99.9% 9175118818/9183507426 roots 5576.1s elapsed  44141.4 GN/s root 44141.4 ETA   5.1s
[2026-07-31 01:34:11:742] -   counting... 100.0% 9179313122/9183507426 roots 5578.7s elapsed  44139.5 GN/s root 44139.5 ETA   2.5s
[2026-07-31 01:34:13:225] -   counting... 100.0% 9183507426/9183507426 roots 5580.2s elapsed  44146.9 GN/s root 44146.9 ETA     --
[2026-07-31 01:34:13:481] - rootdedup: streamed counting consumed 9183507426 roots (5492.475 s gpu)
[2026-07-31 01:34:13:482] - rootdedup: 988192872 -> 28668701726 children, 9183507426 unique (5917.359 s total)
[2026-07-31 01:34:13:937] - level 9 returned
[2026-07-31 01:34:13:937] - Perft 9 2439530234167 5969133.9ms 0.409 GNodes/s
[2026-07-31 01:34:14:336] - stream-count: folded 2190 chunk totals -> 61885021521585529237
[2026-07-31 01:34:13:937] - Kernel execution time: 5969134.016088 milliseconds
[2026-07-31 01:34:13:937] - weighted frontier: depth 9, 9183507426 unique roots (perft(9) = 2439530234167)
[2026-07-31 01:34:13:944] - frontier staging: roots 2MB transparent huge pages, weights 2MB transparent huge pages
[2026-07-31 01:34:14:369] - Perft 1 20
[2026-07-31 01:34:14:369] - Perft 2 400
[2026-07-31 01:34:14:369] - Perft 3 8902
[2026-07-31 01:34:14:369] - Perft 4 197281
[2026-07-31 01:34:14:369] - Perft 5 4865609
[2026-07-31 01:34:14:369] - Perft 6 119060324
[2026-07-31 01:34:14:369] - Perft 7 3195901860
[2026-07-31 01:34:14:369] - Perft 8 84998978956
[2026-07-31 01:34:14:369] - Perft 9 2439530234167
[2026-07-31 01:34:14:369] - Perft 14 61885021521585529237 5969134.0ms 10367504.123 GNodes/s
[2026-07-31 01:34:14:369] - target perft(14): 5969.134 s (cleared tt)
[2026-07-31 01:34:14:369] - [serve] vram free 5477 MB
[2026-07-31 01:34:14:369] - OK 61885021521585529237
Base chess iterations speed went from 350mnps to 2bnps to 5000bnps to 100% scalable 5000bnps due to obsessive effort to push that frontier as far as possible. It does not need exotic hardware. The future outlook is extremely good.

We have entered a truly golden era for computerchess.
Perft(14) in less than 100 minutes? :shock: And Perft(15) running, maybe less than 3 days required... Would Perft(16) take around two months? If that, looks feasible in the sense of time, surely not regarding electric bills. Even compute the 20 possible perft(15) after the first ply and add the values, just to prevent losing an advance run... maybe less than 5 days for each of these smaller runs. I stay tuned.

Regards from Spain.

Ajedrecista.
chessbit
Posts: 45
Joined: Fri Dec 29, 2023 4:47 pm
Location: Belgium
Full name: thomas albert

Re: The Era of Teranode per second movegeneration is here - Gigantua Warp

Post by chessbit »

Great job. I'm way too lazy to learn how to code for a GPU but it certainly looks like the way to go to push boundaries.
Have you implemented a null move at depth 2 (if that is at all possible with that architecture)? It gives a significant speed boost.
DreamerExx
Posts: 65
Joined: Wed May 20, 2026 4:08 pm
Full name: Даниил Крецу

Re: The Era of Teranode per second movegeneration is here - Gigantua Warp

Post by DreamerExx »

Hi Daniel,
This is impressive engineering work regardless of the numbers, but I’d like to understand the perft(14) figure better because something isn’t adding up for me.

In the log you posted, the kernel execution time for producing perft(9) and perft(14) is identical: 5969133.9ms / 5969134.0ms. But the reported speed goes from 0.409 GNodes/s (for perft(9)) to 10,367,504 GNodes/s (for perft(14)) in that same window - a difference of about 25 million times. That doesn’t look like two independent measurements of the same run - it looks like the perft(14) total (which is astronomically large on its own) got divided by the elapsed time of the perft(9) kernel, rather than reflecting actual work done at depth 14.

Separately, going from 2.2 GNPS (single threaded CPU, your earlier Gigantua work) to over 1,000,000 GNPS (8x RTX 5090 with TT) is many orders of magnitude beyond what generation over generation GPU improvements would predict. Even scaling linearly across 8 cards and accounting for a much better algorithm, that gap is hard to reconcile.

Would you be willing to share the source, or at least the exact methodology for how perft(14) was computed and verified against known reference values? That would go a long way toward clearing this up. Not trying to be adversarial, just want to understand the real numbers here, because the underlying architecture ideas (register resident QBB, no movelist materialization) are genuinely interesting on their own merits.
DreamerExx
Posts: 65
Joined: Wed May 20, 2026 4:08 pm
Full name: Даниил Крецу

Re: The Era of Teranode per second movegeneration is here - Gigantua Warp

Post by DreamerExx »

One more thing I noticed after looking at the raw log more closely: the “Perft 14” line isn’t just reusing the perft(9) timer, it also appears to reuse the perft(9) result’s neighboring line. Right before it, there’s a “stream-count: folded 2190 chunk totals -> 61885021521585529237” entry, and that exact same number then shows up as the reported perft(14) total. That suggests the value being labeled perft(14) may actually be some kind of chunk-summation artifact rather than an independent depth-14 count.

There’s also a numeric issue worth flagging separately: 61885021521585529237 exceeds the range of a 64-bit unsigned integer (max ~1.845 x 10^19) by roughly a factor of 3.3. If any accumulator in that reporting path is u64, that value cannot be a correctly summed total, it would have wrapped. Given the emphasis in your writeup on u128-or-larger handling for large trees, I’d guess this is confined to a logging/reporting step rather than the core counting kernel, but it would be good to confirm that the same accumulator width issue doesn’t affect any of the other high-depth totals.

To be clear, none of this changes my read on perft(9) and everything before it, those numbers look internally consistent. It’s specifically the perft(14) line that looks like a reporting bug rather than a real measurement, and I’d just like to understand whether depth 14 was actually computed and verified elsewhere, or whether that line should be retracted.
dangi12012
Posts: 1069
Joined: Tue Apr 28, 2020 10:03 pm
Full name: Daniel Infuehr

Re: The Era of Teranode per second movegeneration is here - Gigantua Warp

Post by dangi12012 »

Sure, if its 100% device resident or hybrid depends on the tree size, which is not known in advance.

So the engine runs on the gpu, if the tree gets too large, it moves to the host, parent deduplication is always happening, which under the 4x symmetry of chess has these branching numbers, and depends on the position.
20, 400, 5362, 72078, 822518
against the normal
20, 400, 8902, 197281, 4865609

It is a explicit version of a weighted TT, reducing the true branching factor as far as possible. The gpu goes to depth 2-10 starting from the tree, optimal being depth 5 (optimal sm residency).

N-5 is omitted, because the gpu frontier is hyper - optimized, and maintaining 5 totals instead of 1 for all threads in a block is just too slow keep in mind a cuda core is a 32bit machine so a u128 takes 4 registers. You can for lower levels keep u32, but then you have different types depending on depth, huge slowdown. There is a --exact which contains all depths and this is the delta time for "exact ladder" in the logs. So its just not there is the answer.

All the final outputs are in the same millisecond, because that is just the print call in the end. Let me run Steven Edwards' symmetric perft probe position. 4x RTX PRO 6000 WS (300W QS Max) in exact mode.

CHESS_EXACT=1 CHESS_STREAM_HOST=0 /root/gigantuawarp --deep "r4rk1/1pp1qppp/p1np1n2/2b1p1B1/2B1P1b1/P1NP1N2/1PP1QPPP/R4RK1 w - - 0 10" 10

Words first P10: (as far as i know)

Code: Select all

multi-GPU: 4 devices, 19106668 roots, chunk 597083
  gpu0: 10 chunks, 4843140 roots, 59.92s
  gpu1: 9 chunks, 4520921 roots, 55.59s
  gpu2: 11 chunks, 5328829 roots, 59.59s
  gpu3: 9 chunks, 4413778 roots, 56.19s
Perft 6 6923051137 (from the primary frontier)
Perft 7 287188994746 (from the primary frontier)
Perft 8 11923589843526 (from the primary frontier)
Perft 9 490154852788714 (from the primary frontier)
Kernel execution time: 79070.469697 milliseconds
Kernel finished
Total 1 46
Total 2 2079
Total 3 89890
Total 4 3894594
Total 5 164075551
Total 6 6923051137
Total 7 287188994746
Total 8 11923589843526
Total 9 490154852788714
Perft 10 20155532500692989 79070.5ms 254905.941 GNodes/s
target perft(10): 79.070 s (exact ladder: +4.118 s for plies 6..9 - 4 from the primary frontier, 0 rebuilt)
Second run

Code: Select all

expand(par): 1 -> 46 children, 46 unique (4 dev, 0.060 s total)
level 1 returned
Perft 1 46 738.3ms 0.000 GNodes/s
expand(par): 46 parents, 2079 children across 4 device(s)
expand(par): 46 -> 2079 children, 2079 unique (4 dev, 0.566 s total)
level 2 returned
Perft 2 2079 1304.9ms 0.000 GNodes/s
expand(par): 2079 parents, 89890 children across 4 device(s)
expand(par): 2079 -> 89890 children, 49377 unique (4 dev, 0.041 s total)
level 3 returned
Perft 3 89890 1346.4ms 0.000 GNodes/s
expand(par): 49377 parents, 2111696 children across 4 device(s)
expand(par): 49377 -> 2111696 children, 1164752 unique (4 dev, 0.561 s total)
level 4 returned
Perft 4 3894594 1921.2ms 0.002 GNodes/s
expand(par): 1164752 parents, 48573531 children across 4 device(s)
expand(par): 1164752 -> 48573531 children, 19106668 unique (4 dev, 16.579 s total)
level 5 returned
Perft 5 164075551 18774.4ms 0.009 GNodes/s
Kernel execution time: 18774.471171 milliseconds
weighted frontier: depth 5, 19106668 unique roots (perft(5) = 164075551)
frontier staging: roots 2MB transparent huge pages, weights 2MB transparent huge pages
multi-GPU: 4 devices, 19106668 roots, chunk 597083
[gossip] OFF (default, pending re-earned dual-GPU A/B verdicts; CHESS_TT_GOSSIP=1 to enable)
  gpu0: 10 chunks, 4804858 roots, 59.53s
  gpu1: 9 chunks, 4463778 roots, 56.03s
  gpu2: 10 chunks, 4827171 roots, 59.66s
  gpu3: 10 chunks, 5010861 roots, 55.11s
Perft 6 6923051137 (from the primary frontier)
Perft 7 287188994746 (from the primary frontier)
Perft 8 11923589843526 (from the primary frontier)
Perft 9 490154852788714 (from the primary frontier)
Kernel execution time: 78438.321025 milliseconds
Kernel finished
Total 1 46
Total 2 2079
Total 3 89890
Total 4 3894594
Total 5 164075551
Total 6 6923051137
Total 7 287188994746
Total 8 11923589843526
Total 9 490154852788714
Perft 10 20155532500692989 78438.3ms 256960.274 GNodes/s
target perft(10): 78.438 s (exact ladder: +4.199 s for plies 6..9 - 4 from the primary frontier, 0 rebuilt)
I attached my vast logs as well now in discord which contain countless fens and full logs for 1000s of runs on different machines and gpus.
Worlds-fastest-Bitboard-Chess-Movegenerator
Daniel Inführ - Software Developer
DreamerExx
Posts: 65
Joined: Wed May 20, 2026 4:08 pm
Full name: Даниил Крецу

Re: The Era of Teranode per second movegeneration is here - Gigantua Warp

Post by DreamerExx »

Thanks for the detailed explanation - that clarifies several things.

The hybrid device/host behaviour, the weighted frontier with parent deduplication, and the reason intermediate totals (N-5) are omitted in the normal path all make sense now. The 4x symmetry reduction in unique positions is also clear.
One point from the original perft(14) log is still unclear to me though:

In that run the kernel execution time reported for producing perft(9) and perft(14) was essentially identical (~5969134 ms). The enormous perft(14) number then appeared right after the line
stream-count: folded 2190 chunk totals -> 61885021521585529237
and was simply labelled as Perft 14, giving the 10+ million GN/s figure.

Was that a reporting artefact (i.e. the known perft(14) value being printed against the earlier timer), or was depth 14 actually counted in that same kernel window?
I’m not doubting the lower depths or the architecture itself - just trying to understand how that particular measurement was produced.
dangi12012
Posts: 1069
Joined: Tue Apr 28, 2020 10:03 pm
Full name: Daniel Infuehr

Re: The Era of Teranode per second movegeneration is here - Gigantua Warp

Post by dangi12012 »

Yes the Timing is Overall for the final number. I tried some other cards today. 8x 5080, 16GB each.
Gossip = probing each others TT, via 6.14. Peer Device Memory Access in nvida toolkit - is not worth it. PCIE is too slow, and the latency is too high.
Only on true NVLINK B200, B300 they add performance uplift and can act like a unified VRAM TT. GPU Chess is for the future, as a single 5090 has a memory bandwith of 1792Gb/s for its own private super fast TT window into the chess tree ist working on. Its a very hard topic to write stackfree, branchless, non materializing, chess code, and I hope we see more in the future.

It takes 105s to calulate P12, 1520s to calculate P13 on 8x 5080 gpus.
Times are extremely consistent on undisturbed server hardware it seems.

Code: Select all

[2026-08-03 19:24:01:871] - Kernel execution time: 105620.061344 milliseconds
[2026-08-03 19:24:01:871] - Kernel finished
[2026-08-03 19:24:01:871] - Total 1 20
[2026-08-03 19:24:01:871] - Total 2 400
[2026-08-03 19:24:01:871] - Total 3 8902
[2026-08-03 19:24:01:871] - Total 4 197281
[2026-08-03 19:24:01:871] - Total 5 4865609
[2026-08-03 19:24:01:871] - Total 6 119060324
[2026-08-03 19:24:01:871] - Total 7 3195901860
[2026-08-03 19:24:01:871] - Total 8 84998978956
[2026-08-03 19:24:01:871] - Total 9 2439530234167
[2026-08-03 19:24:01:871] - Total 10 69352859712417
[2026-08-03 19:24:01:871] - Total 11 2097651003696806
[2026-08-03 19:24:01:871] - Perft 12 62854969236701747 105620.1ms 595104.456 GNodes/s
[2026-08-03 19:24:01:871] - target perft(12): 105.620 s (exact ladder: +55.045 s wall / 27.870 s kernel for plies 8..11 - 4 from the primary frontier, 0 rebuilt)

Code: Select all

[2026-08-03 19:29:00:315] - Kernel execution time: 105048.200460 milliseconds
[2026-08-03 19:29:00:315] - Kernel finished
[2026-08-03 19:29:00:315] - Total 1 20
[2026-08-03 19:29:00:315] - Total 2 400
[2026-08-03 19:29:00:315] - Total 3 8902
[2026-08-03 19:29:00:315] - Total 4 197281
[2026-08-03 19:29:00:315] - Total 5 4865609
[2026-08-03 19:29:00:315] - Total 6 119060324
[2026-08-03 19:29:00:315] - Total 7 3195901860
[2026-08-03 19:29:00:315] - Total 8..11 suppressed (GPU counting-pass partial sums)
[2026-08-03 19:29:00:497] - Perft 12 62854969236701747 105048.2ms 598344.083 GNodes/s

Code: Select all

[2026-08-03 19:08:54:081] - Kernel execution time: 1519925.703557 milliseconds
[2026-08-03 19:08:54:081] - Kernel finished
[2026-08-03 19:08:54:081] - Total 1 20
[2026-08-03 19:08:54:081] - Total 2 400
[2026-08-03 19:08:54:081] - Total 3 8902
[2026-08-03 19:08:54:081] - Total 4 197281
[2026-08-03 19:08:54:081] - Total 5 4865609
[2026-08-03 19:08:54:081] - Total 6 119060324
[2026-08-03 19:08:54:081] - Total 7 3195901860
[2026-08-03 19:08:54:081] - Total 8 84998978956
[2026-08-03 19:08:54:081] - Total 9 2439530234167
[2026-08-03 19:08:54:081] - Total 10 69352859712417
[2026-08-03 19:08:54:081] - Total 11 2097651003696806
[2026-08-03 19:08:54:081] - Total 12 62854969236701747
[2026-08-03 19:08:54:081] - Perft 13 1981066775000396239 1519925.7ms 1303397.113 GNodes/s
[2026-08-03 19:08:54:081] - target perft(13): 1519.926 s (exact ladder: +631.443 s wall / 388.593 s kernel for plies 9..12 - 4 from the primary frontier, 0 rebuilt)
How to read above: It takes 1520s for the engine to know P13. It takes an additional 630s for 1 of the 8 gpus to do P12, which is not optimized. P12 as ist own campaign from scratch takes 105s.

Code: Select all

[2026-08-03 19:55:25:436] - Kernel execution time: 1520399.494354 milliseconds
[2026-08-03 19:55:25:437] - Kernel finished
[2026-08-03 19:55:25:437] - Total 1 20
[2026-08-03 19:55:25:437] - Total 2 400
[2026-08-03 19:55:25:437] - Total 3 8902
[2026-08-03 19:55:25:437] - Total 4 197281
[2026-08-03 19:55:25:437] - Total 5 4865609
[2026-08-03 19:55:25:437] - Total 6 119060324
[2026-08-03 19:55:25:437] - Total 7 3195901860
[2026-08-03 19:55:25:437] - Total 8 84998978956
[2026-08-03 19:55:25:437] - Total 9..12 suppressed (GPU counting-pass partial sums)
[2026-08-03 19:55:27:306] - Perft 13 1981066775000396239 1520399.5ms 1302990.945 GNodes/s
[2026-08-03 19:55:27:306] - target perft(13): 1520.399 s
Above is the default case. A P13 campaign will calc P13 as fast as it can accross all the gpus on that machine. In this case ~25min.
Worlds-fastest-Bitboard-Chess-Movegenerator
Daniel Inführ - Software Developer