# Permanent brain

Is permanent brain any beneficial if they share same core?

"In chess games between two computers, pondering makes sense only if the competing chess engines use separate processors or cores. If they share the same core, the pondering program steals half of the time from the program thinking in the normal way and uses the stolen time less effectively. "

Pondering is less effective than normal thinking. For example, if the program guesses 25% of the opponent's moves correctly, the use of pondering is on average equivalent to increasing the normal calculating time by a factor of 1.25.

In chess games between two computers, pondering makes sense only if the competing chess engines use separate processors or cores. If they share the same core, the pondering program steals half of the time from the program thinking in the normal way and uses the stolen time less effectively. For this reason, chess GUIs have an option to turn the permanent brain off.

Can someone explain the last couple of sentenced for me.

• In chess programming, there is something known as hashing. pondering helps it. May 24 '15 at 2:23
• My question is more like if it is any good idea to reduce the engine power to 50% each so it can in-directly gauge precalculated moves and gain more time as result. May 24 '15 at 17:08

A simpler way to think about it might be to consider the engine's "strength" as a percentage of its maximum strength. Without pondering, each engine plays at 100% strength. With pondering, each engine plays at 100% strength during its turn and 25% strength during the other player's turn (assuming 25% accuracy in pondering guesses), but each turn is half as long (because only half the CPU time is available). So with pondering, the overall engine strength is only 62.5% of its maximum.

• How about this scenario - my CPU is 5960X (8 physical cores) if i enable ponder 4 will be asigned to each engine. From my engine testing the predicted move ratio is much higher than 25% it is actually in the 50-60% range, most often 58-63% so lets make it 60%. Can you calculate the difference in performance between 4-core ponder and 100% CPU resource. Jun 25 '15 at 19:30
• Assuming same engine, fixed time per turn, each engine able to use all cores at 100% if available, 0.5*100% + 0.5*60% = 80% Jun 26 '15 at 20:01
• In general you can estimate the new strength as 50% + 1/2 * (predicted move accuracy). But this becomes less relevant the more you move away from the theoretical scenario I described in my other answer. If you were running two different engines with no per-move time restriction and those engines might not use all cores to 100% during normal operation, this estimate is meaningless. Jun 26 '15 at 20:03
• If the overall playing strength is 80% with 60% ponder accuracy, would't the increased time as result of pondering outweights the -20% penalty? Jun 27 '15 at 14:50
• If the two engines share CPU resources, then you never really get increased time. Half your time is spent handicapped to half the CPU, and the other half is spent handicapped to half the CPU and the penalty for having to guess at the opponent's move. You'll never do as well as having the entire CPU (and no guessing penalty) for half the length of time. Jun 28 '15 at 20:48

Consider a game in which each move must be made within 8 ns of real time. Two identical engines will play, sharing a single core. With pondering disabled, engine A gets 8 ns of CPU time and makes a move, engine B gets 8 ns of CPU time and makes a move, etc. Each move is the result of 8 ns of computation.

With pondering enabled, on the very first move engine A has only had access to the CPU for 4 ns before 8 ns of real time expires. During this time, engine B has had 4 ns of pondering. When engine A makes its move, engine B realizes that most of its pondering was based on an incorrect guess of the move that engine A would make. Suppose that only 25% of engine B's pondering was applicable. Of the 4 ns that engine B spent pondering, only 1 ns was actually useful.

Now it's engine B's turn. Like engine A, engine B only gets access to the CPU for 4 ns before 8 ns of real time expires. Counting the 1 ns of useful pondering, engine B has applied 5 ns of CPU time to its move. During this time engine A has had 4 ns of pondering, but again, only 25% (1 ns) is useful. On engine A's next turn it will also have applied 5 ns of CPU time to its move. With pondering, each move is the result of 5 ns of computation, except for the very first move, which is the result of only 4 ns of computation. You will get a better game (both engines performing more calculations per move) if you disable pondering.

If the engines are different the results will depend on engine implementation. In the extreme case, imagine that engine A can compute the absolutely best move with exactly 8 ns of computation, but after 4 ns it has only a wild guess. Engine B's performance scales much smoother with the amount of time it has to think. In this silly example, with pondering disabled engine A will win every game, but with pondering enabled engine B will win every game. I suspect that in real life, between two real engines, pondering will decrease the quality of the game fairly evenly, without giving either engine an advantage.

If the per-move time restriction is replaced with a total time restriction I think the results would be similar, except that the way in which engines decide how much time to commit to a move would have a greater effect. That is, I think that pondering would amplify the importance of deciding whether a move requires additional thinking time.

Taking all that together: if you want a battle between engines performing at their peak but you only have one core, disable pondering.