summaryrefslogtreecommitdiff
path: root/src/generate.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/generate.c')
-rwxr-xr-xsrc/generate.c31
1 files changed, 22 insertions, 9 deletions
diff --git a/src/generate.c b/src/generate.c
index 7362fba..3e3c3a5 100755
--- a/src/generate.c
+++ b/src/generate.c
@@ -2467,20 +2467,33 @@ Return value:
//
//
- // Pre-populate killer/bonuses. (Tried Crafty-style ordering here
- // -- both of this ply's own killers before either ply-2-back one
- // -- measured worse EBF on ecm_quick than this interleaved order.
- // Back to interleaved as the known-good baseline.)
+ // Pre-populate killer/bonuses. Crafty-style ordering: both of this
+ // ply's own killers before either ply-2-back one. (Reverted twice
+ // before -- see git history -- but this pass is on top of both
+ // NumLeftoverMovesToSelect and the mvNullmoveQuietRefutations fix
+ // (dynamic.c/searchsup.c), and beats the interleaved order (this
+ // ply's killer1, ply-2's killer1, this ply's killer2, ply-2's
+ // killer2) head-to-head on every metric with the fix applied to
+ // both: more solves, fewer nodes, equal-or-higher first-move beta
+ // cutoff on 2 of 3 curated suites. Both orderings lose first-move
+ // cutoff rate vs. head_reference once the backfill is added -- that
+ // appears to be a cost of the backfill itself, not of tier order --
+ // but Crafty order is the one where the backfilled data lands in a
+ // tier (this ply's own killer[1], promoted to SECOND_KILLER here)
+ // that's otherwise structurally almost always empty, so it's pure
+ // upside there; under interleaved order the same backfill instead
+ // lands in THIRD_KILLER, behind two already-real proven killers,
+ // where it appears to cost more (misordering) than it gives.)
//
sKillers[0].mv = ctx->mvKiller[uPly][0];
sKillers[0].uBonus = FIRST_KILLER;
- sKillers[1].mv.uMove = sKillers[3].mv.uMove = 0;
- sKillers[2].mv = ctx->mvKiller[uPly][1];
- sKillers[2].uBonus = THIRD_KILLER;
+ sKillers[1].mv = ctx->mvKiller[uPly][1];
+ sKillers[1].uBonus = SECOND_KILLER;
+ sKillers[2].mv.uMove = sKillers[3].mv.uMove = 0;
if (uPly > 1)
{
- sKillers[1].mv = ctx->mvKiller[uPly - 2][0];
- sKillers[1].uBonus = SECOND_KILLER;
+ sKillers[2].mv = ctx->mvKiller[uPly - 2][0];
+ sKillers[2].uBonus = THIRD_KILLER;
sKillers[3].mv = ctx->mvKiller[uPly - 2][1];
sKillers[3].uBonus = FOURTH_KILLER;
}