mirror of
https://github.com/HChaZZY/Stockfish.git
synced 2025-12-21 01:27:16 +08:00
Remove Stack/thread dependence in movepick
as a lower level routine, movepicker should not depend on the search stack or the thread class, removing a circular dependency. Instead of copying the search stack into the movepicker object, as well as accessing the thread class for one of the histories, pass the required fields explicitly to the constructor (removing the need for thread.h and implicitly search.h in movepick.cpp). The signature is thus longer, but more explicit: Also some renaming of histories structures while there. passed STC [-3,1], suggesting a small elo impact: LLR: 3.13 (-2.94,2.94) [-3.00,1.00] Total: 381053 W: 68071 L: 68551 D: 244431 elo = -0.438 +- 0.660 LOS: 9.7% No functional change.
This commit is contained in:
committed by
Marco Costalba
parent
53c2d9df5e
commit
b40e45c1cc
@@ -21,7 +21,6 @@
|
||||
#include <cassert>
|
||||
|
||||
#include "movepick.h"
|
||||
#include "thread.h"
|
||||
|
||||
namespace {
|
||||
|
||||
@@ -67,23 +66,21 @@ namespace {
|
||||
/// search captures, promotions, and some checks) and how important good move
|
||||
/// ordering is at the current node.
|
||||
|
||||
MovePicker::MovePicker(const Position& p, Move ttm, Depth d, Search::Stack* s)
|
||||
: pos(p), ss(s), depth(d) {
|
||||
MovePicker::MovePicker(const Position& p, Move ttm, Depth d, const ButterflyHistory* mh,
|
||||
const PieceToHistory** ch, Move cm, Move* killers_p)
|
||||
: pos(p), mainHistory(mh), contHistory(ch), countermove(cm),
|
||||
killers{killers_p[0], killers_p[1]}, depth(d){
|
||||
|
||||
assert(d > DEPTH_ZERO);
|
||||
|
||||
Square prevSq = to_sq((ss-1)->currentMove);
|
||||
countermove = pos.this_thread()->counterMoves[pos.piece_on(prevSq)][prevSq];
|
||||
killers[0] = ss->killers[0];
|
||||
killers[1] = ss->killers[1];
|
||||
|
||||
stage = pos.checkers() ? EVASION : MAIN_SEARCH;
|
||||
ttMove = ttm && pos.pseudo_legal(ttm) ? ttm : MOVE_NONE;
|
||||
stage += (ttMove == MOVE_NONE);
|
||||
}
|
||||
|
||||
MovePicker::MovePicker(const Position& p, Move ttm, Depth d, Square s)
|
||||
: pos(p) {
|
||||
MovePicker::MovePicker(const Position& p, Move ttm, Depth d, const ButterflyHistory* mh,
|
||||
const PieceToHistory** ch, Square s)
|
||||
: pos(p), mainHistory(mh), contHistory(ch) {
|
||||
|
||||
assert(d <= DEPTH_ZERO);
|
||||
|
||||
@@ -143,33 +140,22 @@ void MovePicker::score<CAPTURES>() {
|
||||
template<>
|
||||
void MovePicker::score<QUIETS>() {
|
||||
|
||||
const ButterflyHistory& history = pos.this_thread()->history;
|
||||
|
||||
const PieceToHistory& cmh = *(ss-1)->history;
|
||||
const PieceToHistory& fmh = *(ss-2)->history;
|
||||
const PieceToHistory& fm2 = *(ss-4)->history;
|
||||
|
||||
Color c = pos.side_to_move();
|
||||
|
||||
for (auto& m : *this)
|
||||
m.value = cmh[pos.moved_piece(m)][to_sq(m)]
|
||||
+ fmh[pos.moved_piece(m)][to_sq(m)]
|
||||
+ fm2[pos.moved_piece(m)][to_sq(m)]
|
||||
+ history[c][from_to(m)];
|
||||
m.value = (*mainHistory)[pos.side_to_move()][from_to(m)]
|
||||
+ (*contHistory[0])[pos.moved_piece(m)][to_sq(m)]
|
||||
+ (*contHistory[1])[pos.moved_piece(m)][to_sq(m)]
|
||||
+ (*contHistory[3])[pos.moved_piece(m)][to_sq(m)];
|
||||
}
|
||||
|
||||
template<>
|
||||
void MovePicker::score<EVASIONS>() {
|
||||
// Try captures ordered by MVV/LVA, then non-captures ordered by stats heuristics
|
||||
const ButterflyHistory& history = pos.this_thread()->history;
|
||||
Color c = pos.side_to_move();
|
||||
|
||||
for (auto& m : *this)
|
||||
if (pos.capture(m))
|
||||
m.value = PieceValue[MG][pos.piece_on(to_sq(m))]
|
||||
- Value(type_of(pos.moved_piece(m))) + (1 << 28);
|
||||
else
|
||||
m.value = history[c][from_to(m)];
|
||||
m.value = (*mainHistory)[pos.side_to_move()][from_to(m)];
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user