Chess engines are an irreplaceable part of professional training. And while most players use them on a daily basis, they may not fully understand the importance and correlation of the values they show during analysis. For example, the depth value is the first number that catches the eye. The higher it is the better the analyses are supposed to be. And yet, many players may ignore an equally important value called NPS.
Nodes per second or NPS, as it is often referred to, can tell much about the credibility of engine analysis. In fact, it may sometimes be even more talkative than the depth. So...
Nodes per second (NPS) is the main measure of chess engines’ speed. It indicates the number of positions the engine considers in one second. You may often see NPS calculated in kN/s (kilo nodes per second) or MN/s to denote the number by one thousand or one million respectively. Thus, 45,000,000 NPS = 45,000 kN/s = 45 MN/s.
A node, in turn, is a chess position with its evaluation and history, i.e. castling rights, repetition of moves, move turn, etc. Once you make a move, the engine starts calculating various continuations in search of the best move. This process can be described as a decision tree with its root being the current position. Every legal move creates a new position, known as a child node, and each of those child nodes, in turn, grows into more branches with every legal move.
Despite the popular belief that it is the depth of the engine analysis that decides its credibility, the truth is that the depth value is heavily dependent on and should only be viewed with regard to NPS.
Stockfish working on 4 CPUs of an average local computer considers around 5,000k nodes per second, which is insufficient for in-depth analysis. A local high-end computer, on the other hand, can support up to 20,000 kN/s; and a special pay-top-dollar local server, which may be owned by some super GMs only, will provide around 50,000kN/s. Higher speeds are possible to reach only with cloud servers: from 100,000 to 1 million kN/s and even higher if needed.
But is more always better? Chess engines have three primary functions: searching different continuations (NPS), evaluating them, and calculating as many moves as possible (depth). The goal of a chess engine is to effectively allocate the recourses of CPUs it's using between these three functions. Different engines use different algorithms and methods to achieve it, so it does not make much sense to compare the number of nodes or depth of different engines. For example, Stockfish operates with the so-called "thin" nodes (little evaluation for a much bigger number of nodes), while Leela Chess Zero operates with "thick" nodes (better evaluation for a smaller number of nodes).
LCZero considers around 1000x fewer nodes per second than Stockfish, but it applies a much stronger evaluation method. In other words, it prioritizes quality over quantity. And despite the difference in the algorithms of Stockfish and Lc0, they will show almost identical results in a given position. Note how Lc0 has reached 2x less depth and 1000x less NPS.
Importantly, if any of the three main factors (NPS, depth, evaluation) spends more resources, the other two will be affected negatively. For example, a high NPS value will affect the engine's time to depth speed-up as it happens with Stockfish. And better evaluation of the nodes can reduce NPS as is the case with Lc0.
The NPS value is essential in measuring the accuracy of a chess engine’s evaluation. The more positions an engine analyzes the better the chances that it won’t cut off any important variations. That's why high NPS is valuable for finding opening novelties. Even though, it does affect the time to depth speedup, the analysis and playing strength of the engine do not suffer. Back in 2018, we conducted an experimental tournament between Stockfish engines running on different numbers of CPUs to prove this point. The 4-CPU Stockfish, which often has a worse time-to-depth speedup than the 1-CPU Stockfish, beat the latter quite convincingly in a 100-game match. See the full results here.
It was in 2016 when two of the best chess engines in the world, Stockfish, and Houdini, started to use a new algorithm called Lazy SMP which prioritized the NPS value over depth. The algorithm helped significantly widen the node search speed of the two engines, which had a positive impact on their playing strength. After this change, both Stockfish and Houdini improved their performance at the Top Chess Engines Championship (TCEC) which featured all the best chess engines in the world. During seasons 9-19, for example, Stockfish won 8 of the 10 superfinals it qualified for.
On the top right corner of the second line, you can find the NPS value for the Stockfish engine: 49,473 kN/s. This means that the engine is calculating 49,473,000 positions (nodes) per second.
If you reduce the number of the lines via the "zoom-out" icon, the engine will also show you the time it has been analyzing and the number of nodes it has considered in total after making your last move.
You may also be interested in
Thanks to this partnership, the Chess Olympiad Gold medallists in the Open and Women’s categories, both teams and individual boards, will be awarded GrandMaster packages by Chessify, with the opportunity of leveraging premium chess game analysis from the strongest chess engines.
Discover how these startups use #AI and powerful #cloud analysis to help players take their performance to the next level.
Join 150+ GMs on Chessify Cloud to level up your training. Analyze securely with user-dedicated cloud servers at up to 1 BIllion NPS speed