Optimisation of Position::see and Position::see_sign
authoratumanian <1>
Thu, 6 Oct 2016 17:55:10 +0000 (20:55 +0300)
committerMarco Costalba <mcostalba@gmail.com>
Sat, 8 Oct 2016 04:38:36 +0000 (06:38 +0200)
commit073eed590edf992ed3aeb6c754cb0b3b394fe79d
treef1b9a57e17548f3e24d40fcc992eab217eeceee5
parent1e586288ca4a0ae567c8d9b9b77e804f25fe6719
Optimisation of Position::see and Position::see_sign

Stephane's patch removes the only usage of Position::see, where the
returned value isn't immediately compared with a value. So I replaced
this function by its optimised and more specific version see_ge. This
function also supersedes the function Position::see_sign.

bool Position::see_ge(Move m, Value v) const;

This function tests if the SEE of a move is greater or equal than a
given value. We use forward iteration on captures instread of backward
one, therefore we don't need the swapList array. Also we stop as soon
as we have enough information to obtain the result, avoiding unnecessary
calls to the min_attacker function.

Speed tests (Windows 7), 20 runs for each engine:
Test engine: mean 866648, st. dev. 5964
Base engine: mean 846751, st. dev. 22846
Speedup: 1.023

Speed test by Stephane Nicolet

Fishtest STC test:
LLR: 2.96 (-2.94,2.94) [0.00,5.00]
Total: 26040 W: 4675 L: 4442 D: 16923
http://tests.stockfishchess.org/tests/view/57f648990ebc59038170fa03

No functional change.
src/movepick.cpp
src/position.cpp
src/position.h
src/search.cpp