lichess.org
Donate

Perft 15 was independently verified for the first time

On 17 August 2026 at 00:49:52, a calculation of perft(15) finished and matched the value exactly.

perft(15) = 2,015,099,950,053,364,471,960

Why is this important:

This is the first independent verification of perft (15), which stands for performance test in chess engines. This is also how we know the branching factor of thess: 20, 400 and so on. This number was coming from a single source in 2017. So the basis of the known branching factors up to ply 15.

For context on how far this has moved: the fastest known move 10 years ago was ~350 MNPS. then the bar was raised on CPU raised that to 2.2 GNPS per thread. Later the first gpu engine, which was used for perft(15) at 100 Billion Nodes per second. And now in 2026 we have gigantua-warp which is now enumerating chess positions at 2 Trillion Nodes per second per 3080 gpu.

How that was achieved among other things -

Branch-free, non-divergent code with essentially zero device memory footprint + absolute minimum register usage in Nsight Compute.

No materialized move list. Materializing one thrashes shared memory, and shared memory (10× faster than global) is already far too slow for this.

Make/unmake with the board held in registers, using a 90º rotated QBB.

u128 counters. u64 is a footgun once the trees get this large.

Color-free chess. It is never "white vs black", it is us vs them. The side to move always moves in the same direction, and the board is reverted between moves via brevll. All the color-dependent masks and shifts collapse into color-independent constants, and the color-to-move template simply stops existing as a concept.

Cooperative groups, a cuda feature, not used at all. We dont talk with other blocks (except indirectly via the transposition table). That is very very important for fast movegen.

More information is here - https://www.talkchess.com/forum3/viewtopic.php?t=86588&sid=198e5a49585f1e1ef0104c08d623ceb1

2017 source - http://www.talkchess.com/forum/viewtopic.php?t=64983&start=4

I estimate a perft(16) calculation would take 4000-8500usd in terms of vastai rent - which is very much in reach, and we are reaching out to Universities at the moment as well.

On 17 August 2026 at 00:49:52, a calculation of *perft(15)* finished and matched the value exactly. perft(15) = 2,015,099,950,053,364,471,960 Why is this important: This is the first independent verification of perft (15), which stands for performance test in chess engines. This is also how we know the branching factor of thess: 20, 400 and so on. This number was coming from a single source in 2017. So the basis of the known branching factors up to ply 15. For context on how far this has moved: the fastest known move 10 years ago was ~350 MNPS. then the bar was raised on CPU raised that to 2.2 GNPS per thread. Later the first gpu engine, which was used for perft(15) at 100 Billion Nodes per second. And now in 2026 we have gigantua-warp which is now enumerating chess positions at 2 Trillion Nodes per second per 3080 gpu. How that was achieved among other things - Branch-free, non-divergent code with essentially zero device memory footprint + absolute minimum register usage in Nsight Compute. No materialized move list. Materializing one thrashes shared memory, and shared memory (10× faster than global) is already far too slow for this. Make/unmake with the board held in registers, using a 90º rotated QBB. u128 counters. u64 is a footgun once the trees get this large. Color-free chess. It is never "white vs black", it is us vs them. The side to move always moves in the same direction, and the board is reverted between moves via brevll. All the color-dependent masks and shifts collapse into color-independent constants, and the color-to-move template simply stops existing as a concept. Cooperative groups, a cuda feature, not used at all. We dont talk with other blocks (except indirectly via the transposition table). That is very very important for fast movegen. More information is here - https://www.talkchess.com/forum3/viewtopic.php?t=86588&sid=198e5a49585f1e1ef0104c08d623ceb1 2017 source - http://www.talkchess.com/forum/viewtopic.php?t=64983&start=4 I estimate a perft(16) calculation would take 4000-8500usd in terms of vastai rent - which is very much in reach, and we are reaching out to Universities at the moment as well.

Maybe for my friends that are not so knowledgable, you could add a bit more explanation on what is perft?

Maybe for my friends that are not so knowledgable, you could add a bit more explanation on what is perft?

Perft(N) is a function that generates and counts strictly legal end-point positions for a given ply depth N (one ply being a move by one player, e.g. 1. e2-e4 is one ply, perft(1) is 20 because White has 20 legal moves). High speed perft(N) implementations have little practical value for a chess playing engine because usually the moves are not ordered by merit (e.g. captures first, then non capturing moves).

Perft(N) is a function that generates and counts strictly legal end-point positions for a given ply depth N (one ply being a move by one player, e.g. 1. e2-e4 is one ply, perft(1) is 20 because White has 20 legal moves). High speed perft(N) implementations have little practical value for a chess playing engine because usually the moves are not ordered by merit (e.g. captures first, then non capturing moves).

So this is similar to table base or better said what comes before table base?

Or is it stripped down so far for counting that you can’t reverse it in an actual position?
If the latter is true then it does not have to do with chess, but only maths and computing?

Edit: I am, ofc, also asking for a friend.

So this is similar to table base or better said what comes before table base? Or is it stripped down so far for counting that you can’t reverse it in an actual position? If the latter is true then it does not have to do with chess, but only maths and computing? Edit: I am, ofc, also asking for a friend.

Multiplying out roughly 500 nodes per ply across 80 plies to get 40,000 total nodes for a GM player.

Multiplying out roughly 500 nodes per ply across 80 plies to get 40,000 total nodes for a GM player.

This topic has been archived and can no longer be replied to.