Introduce Cut/All node definitions
authorMarco Costalba <mcostalba@gmail.com>
Sun, 9 Jun 2013 07:43:04 +0000 (09:43 +0200)
committerMarco Costalba <mcostalba@gmail.com>
Thu, 13 Jun 2013 17:46:49 +0000 (19:46 +0200)
commit3b8f66f8accefe86db9296fa276e4b33cdc450e2
tree320f27aef47f14986457f8feae9604255e4fb130
parentb6e9d901b0f82e8500acfad590649bdad9a7756f
Introduce Cut/All node definitions

Follow Don Dailey definition of cut/all node:

"If the previous node was a cut node, we consider this an ALL node.
The only exception is for PV nodes which are a special case of ALL nodes.
In the PVS framework, the first zero width window searched from a PV
node is by our definition a CUT node and if you have to do a re-search
then it is suddenly promoted to a PV nodes (as per PVS search) and only
then can the cut and all nodes swap positions. In other words, these
internal search failures can force the status of every node in the subtree
to swap if it propagates back to the last PV nodes."

http://talkchess.com/forum/viewtopic.php?topic_view=threads&p=519741&t=47577

With this definition we have an hit rate higher than 90% on:

    if (!PvNode && depth > 4 * ONE_PLY)
        dbg_hit_on_c(cutNode, (bestValue >= beta));

And an hit rate of just 28% on:

    if (!PvNode && depth > 4 * ONE_PLY)
        dbg_hit_on_c(!cutNode, (bestValue >= beta));

No functional change.
src/search.cpp
src/thread.cpp
src/thread.h