From: Stefan Geschwentner Date: Tue, 27 Feb 2018 17:38:08 +0000 (+0100) Subject: Stat score initialization: grandchildren X-Git-Url: https://git.sesse.net/?p=stockfish;a=commitdiff_plain;h=cccbecb6f8de4e34d8856f121760b74185987d8e Stat score initialization: grandchildren This is the sequel of the previous patch, we now let the parent node initialize stat score to zero once for all grandchildren. Initialize statScore to zero for the grandchildren of the current position. So statScore is shared between all grandchildren and only the first grandchild starts with statScore = 0. Later grandchildren start with the last calculated statScore of the previous grandchild. This influences the reduction rules in LMR which are based on the statScore of parent position. Tests results against the previous patch: STC: LLR: 2.96 (-2.94,2.94) [0.00,4.00] Total: 23676 W: 5417 L: 5157 D: 13102 http://tests.stockfishchess.org/tests/view/5a9423a90ebc590297cc8a46 LTC: LLR: 2.96 (-2.94,2.94) [0.00,4.00] Total: 35485 W: 6168 L: 5898 D: 23419 http://tests.stockfishchess.org/tests/view/5a9435550ebc590297cc8a54 Bench: 5643520 --- diff --git a/src/search.cpp b/src/search.cpp index a5b07d2f..3874852b 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -517,13 +517,6 @@ namespace { bestValue = -VALUE_INFINITE; maxValue = VALUE_INFINITE; - // Initialize statScore to zero for the childs of the current position. - // So statScore is shared between sibling positions and only the first sibling - // starts with statScore = 0. Later siblings start with the last calculated - // statScore of the previous sibling. This influences in LMR the reduction rules - // which based on the statScore of parent position. - (ss+1)->statScore = 0; - // Check for the available remaining time if (thisThread == Threads.main()) static_cast(thisThread)->check_time(); @@ -560,6 +553,13 @@ namespace { (ss+2)->killers[0] = (ss+2)->killers[1] = MOVE_NONE; Square prevSq = to_sq((ss-1)->currentMove); + // Initialize statScore to zero for the grandchildren of the current position. + // So statScore is shared between all grandchildren and only the first grandchild + // starts with statScore = 0. Later grandchildren start with the last calculated + // statScore of the previous grandchild. This influences the reduction rules in + // LMR which are based on the statScore of parent position. + (ss+2)->statScore = 0; + // Step 4. Transposition table lookup. We don't want the score of a partial // search to overwrite a previous full search TT value, so we use a different // position key in case of an excluded move.