1
0
Fork 0
mirror of https://github.com/sockspls/badfish synced 2025-04-30 16:53:09 +00:00

Delay sorting of negative scored non-captures

We can do this only when needed, if we get a cut-off
before we skip sorting entirely. This reduces sorting
time of about 20%.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
Marco Costalba 2010-02-05 18:17:52 +01:00
parent 69644d3f73
commit c7866a4215
3 changed files with 10 additions and 5 deletions

View file

@ -89,7 +89,7 @@ inline void insertion_sort(T* firstMove, T* lastMove)
// Our dedicated sort in range [firstMove, lastMove), first splits
// positive scores from ramining then order seaprately the two sets.
template<typename T>
inline void sort_moves(T* firstMove, T* lastMove)
inline void sort_moves(T* firstMove, T* lastMove, T** lastPositive)
{
T tmp;
T *p, *d;
@ -114,9 +114,9 @@ inline void sort_moves(T* firstMove, T* lastMove)
} while (p != d);
// Sort positives and non-positives separately
// Sort just positive scored moves, remaining only when we get there
insertion_sort<T>(firstMove, p);
insertion_sort<T>(p, lastMove);
*lastPositive = p;
}
// Picks up the best move in range [curMove, lastMove), one per cycle.

View file

@ -136,7 +136,7 @@ void MovePicker::go_next_phase() {
case PH_NONCAPTURES:
lastMove = generate_noncaptures(pos, moves);
score_noncaptures();
sort_moves(moves, lastMove);
sort_moves(moves, lastMove, &lastGoodNonCapture);
return;
case PH_BAD_CAPTURES:
@ -305,6 +305,11 @@ Move MovePicker::get_next_move() {
break;
case PH_NONCAPTURES:
// Sort negative scored moves only when we get there
if (curMove == lastGoodNonCapture)
insertion_sort(lastGoodNonCapture, lastMove);
move = (curMove++)->move;
if ( move != ttMoves[0].move
&& move != ttMoves[1].move

View file

@ -64,7 +64,7 @@ private:
MoveStack ttMoves[2], killers[2];
int phase;
const uint8_t* phasePtr;
MoveStack *curMove, *lastMove, *lastBadCapture;
MoveStack *curMove, *lastMove, *lastGoodNonCapture, *lastBadCapture;
Bitboard pinned;
MoveStack moves[256], badCaptures[64];
};