Jörg Oster [Sun, 25 Dec 2016 09:44:56 +0000 (10:44 +0100)]
Further simplify unstoppable (#938)
By finally moving it into passed pawns eval.
Tested for no regression:
STC
LLR: 3.25 (-2.94,2.94) [-3.00,1.00]
Total: 57109 W: 10023 L: 9947 D: 37139
LTC
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 21511 W: 2800 L: 2680 D: 16031
Bench:
5255881
hxim [Sun, 25 Dec 2016 09:40:17 +0000 (10:40 +0100)]
Fix psqt format and use smaller numbers in king psqt (#940)
Fix minus sign in pawn psqt and use smaller numbers in king psqt.
No functional change.
Joost VandeVondele [Sun, 25 Dec 2016 09:34:48 +0000 (10:34 +0100)]
Explicitly use alpha+1 for beta in NonPV search (#939)
Fixes the only exception, in razoring.
The code already does assert(PvNode || (alpha == beta - 1)), and it can be verified by studying the program flow that this is indeed the case, also for the modified line.
No functional change.
Joost VandeVondele [Thu, 22 Dec 2016 15:02:32 +0000 (16:02 +0100)]
Simplify threshold handling for probcut. (#936)
Just use greater equal as this is what see_ge does now.
passed STC
LLR: 2.94 (-2.94,2.94) [-3.00,1.00]
Total: 226506 W: 39755 L: 39978 D: 146773
passed LTC
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 138483 W: 17450 L: 17479 D: 103554
Bench:
5212921
Stefano Cardanobile [Tue, 20 Dec 2016 10:18:19 +0000 (11:18 +0100)]
piecesCount (#932)
All counts in search.cpp are of the form xxxCount. Conform piecesCnt to this unwritten rule.
No functional change.
Joost VandeVondele [Tue, 20 Dec 2016 10:17:38 +0000 (11:17 +0100)]
Use DEPTH_ZERO initializer for depth in qsearch (#931)
Simplifies the main search function.
No functional change.
VoyagerOne [Fri, 16 Dec 2016 16:05:34 +0000 (11:05 -0500)]
Another simplification for SEE pruning
STC:
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 29310 W: 5225 L: 5118 D: 18967
LTC:
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 128454 W: 16424 L: 16442 D: 95588
Bench:
4556848
Stefan Geschwentner [Mon, 12 Dec 2016 11:01:16 +0000 (12:01 +0100)]
Simplify pruning
STC: http://tests.stockfishchess.org/tests/view/
5842be140ebc5903140c5619
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 16014 W: 2839 L: 2710 D: 10465
LTC: http://tests.stockfishchess.org/tests/view/
584316a50ebc5903140c5638
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 182360 W: 22830 L: 22914 D: 136616
Retested at LTC
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 45502 W: 5821 L: 5732 D: 33949
Bench:
4684146
Joost VandeVondele [Sun, 11 Dec 2016 19:05:25 +0000 (20:05 +0100)]
Clean-up skipEarlyPruning (#921)
make skipEarlyPruning a search argument instead of managing this by hand.
Verified for no regression at STC:
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 96754 W: 17089 L: 17095 D: 62570
No functional change.
Jonathan Calovski [Sun, 11 Dec 2016 18:57:02 +0000 (05:57 +1100)]
Simplify unstoppable condition
STC:
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 86389 W: 15165 L: 15153 D: 56071
LTC:
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 98143 W: 12311 L: 12288 D: 73544
Bench:
5437987
Joost VandeVondele [Mon, 5 Dec 2016 17:58:12 +0000 (18:58 +0100)]
Refactor bonus and penalty calculation (#917)
* Refactor bonus and penalty calculation
Compute common terms in a helper function.
No functional change.
* Further refactoring
Remove some parenthesis that are now useless.
Define prevSq once, use repeatedly.
No functional change.
bench:
5884767 (bench of previous patch is wrong)
Stéphane Nicolet [Mon, 5 Dec 2016 17:49:07 +0000 (18:49 +0100)]
Pawn flank attacks
This patch tweaks some pawn values to favor flank attacks.
The first part of the patch increases the midgame psqt values of external pawns to launch more attacks (credits to user GuardianRM for this idea), while the second part increases the endgame connection values for pawns on upper ranks.
Passed STC:
LLR: 2.95 (-2.94,2.94) [0.00,4.00]
Total: 34997 W: 6328 L: 6055 D: 22614
and LTC:
LLR: 2.96 (-2.94,2.94) [0.00,4.00]
Total: 13844 W: 1832 L: 1650 D: 10362
Bench:
5884767
ElbertoOne [Sun, 4 Dec 2016 08:28:55 +0000 (09:28 +0100)]
Remove piece condition in decrease lmr reduction check
STC: http://tests.stockfishchess.org/tests/view/
584154780ebc5903140c55cf
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 40866 W: 7251 L: 7164 D: 26451
LTC: http://tests.stockfishchess.org/tests/view/
5841e6e50ebc5903140c5605
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 62413 W: 7948 L: 7881 D: 46584
Bench:
5807913
Andrey Neporada [Sat, 3 Dec 2016 08:37:07 +0000 (12:37 +0400)]
Help GCC to optimize msb() to single instruction
GCC compiles builtin_clzll to “63 ^ BSR”. BSR is processor instruction "Bit Scan Reverse".
So old msb() function is basically 63 - 63 ^ BSR.
Unfortunately, GCC fails to simplify this expression.
Old function compiles to
bsrq %rdi, %rdi
movl $63, %eax
xorq $63, %rdi
subl %edi, %eax
ret
New function compiles to
bsrq %rdi, %rax
ret
BTW, Clang compiles both function to the same (optimal) code.
No functional change.
goodkov [Tue, 29 Nov 2016 20:43:03 +0000 (00:43 +0400)]
Simplify pruning rule
STC: http://tests.stockfishchess.org/tests/view/
583df86d0ebc5903140c5481
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 43283 W: 7761 L: 7678 D: 27844
LTC: http://tests.stockfishchess.org/tests/view/
583f42670ebc5903140c5525
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 56587 W: 7232 L: 7157 D: 42198
bench:
5084980
Joost VandeVondele [Thu, 1 Dec 2016 13:55:00 +0000 (14:55 +0100)]
WeakQueen Parameter tweak
New tuned values.
passed STC
http://tests.stockfishchess.org/tests/view/
5834573c0ebc5903140c507b
LLR: 3.16 (-2.94,2.94) [0.00,4.00]
Total: 157415 W: 27917 L: 27227 D: 102271
passed LTC
http://tests.stockfishchess.org/tests/view/
58388d2b0ebc5903140c523b
LLR: 2.95 (-2.94,2.94) [0.00,4.00]
Total: 95405 W: 12350 L: 11959 D: 71096
Bench:
4912054
ElbertoOne [Tue, 22 Nov 2016 08:11:00 +0000 (09:11 +0100)]
TrappedRook simplification
Just remove rank checks for rook and king for TrappedRook evaluation.
STC: http://tests.stockfishchess.org/tests/view/
5833fdfc0ebc5903140c5050
LLR: 3.03 (-2.94,2.94) [-3.00,1.00]
Total: 34474 W: 6088 L: 5986 D: 22400
LTC: http://tests.stockfishchess.org/tests/view/
58392f3f0ebc5903140c5276
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 48358 W: 6221 L: 6136 D: 36001
bench:
5536128
theo77186 [Sun, 27 Nov 2016 13:43:52 +0000 (14:43 +0100)]
Fix PGO build with GCC (#904)
Michael Byrne [Fri, 25 Nov 2016 15:59:38 +0000 (10:59 -0500)]
Fix PGO Build for clang
This fixes https://github.com/official-stockfish/Stockfish/issues/167.
Additional improvments by Joost VandeVondele.
joergoster [Sat, 26 Nov 2016 09:56:24 +0000 (10:56 +0100)]
Fix trace in case of space evaluation
We only compute space eval during the opening/early midgame.
Apply the same logic for DoTrace.
No functional change.
Marco Costalba [Sun, 27 Nov 2016 08:11:56 +0000 (09:11 +0100)]
Fix regression: print const position
Fix a regression introduced with new TB code.
No functional change.
mbootsector [Fri, 25 Nov 2016 16:47:18 +0000 (17:47 +0100)]
Rank based threats
STC:
LLR: 2.95 (-2.94,2.94) [0.00,5.00]
Total: 19404 W: 3581 L: 3374 D: 12449
LTC:
LLR: 2.96 (-2.94,2.94) [0.00,5.00]
Total: 16204 W: 2194 L: 2023 D: 11987
Bench:
5757843
Joost VandeVondele [Sat, 26 Nov 2016 14:13:58 +0000 (15:13 +0100)]
Fix undefined behavior
This fixes #892. Undefined behavior as seen with
clang -fsanitize=undefined.
No functional change.
Marco Costalba [Fri, 25 Nov 2016 15:51:24 +0000 (16:51 +0100)]
Fix compile under Windows XP
The needed Windows API for processor groups could be missed from old Windows
versions, so instead of calling them directly (forcing the linker to resolve
the calls at compile time), try to load them at runtime. To do this we need
first to define the corresponding function pointers.
Also don't interfere with running fishtest on numa hardware with Windows.
Avoid all stockfish one-threaded processes will run on the same node
No functional change.
Aram Tumanian [Mon, 21 Nov 2016 15:17:47 +0000 (17:17 +0200)]
Fix the pawn hash failure when the pawn key is 0
This patch fixed bugs #859 and #882.
At initialization we generate a new random key (Zobrist::noPawns).
It's added to the pawn key of all positions, so that the pawn key
of a pawnless position is no longer 0.
STC:
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 21307 W: 3738 L: 3618 D: 13951
LTC:
LLR: 2.94 (-2.94,2.94) [-3.00,1.00]
Total: 45270 W: 5737 L: 5648 D: 33885
No functional change.
erbsenzaehler [Sun, 20 Nov 2016 21:35:47 +0000 (22:35 +0100)]
Cleanup Makfile for MacOs
1) Explicitly setting the default lib to the system-default is not
needed on a Mac. See:
http://libcxx.llvm.org/docs/UsingLibcxx.html
2) We do no longer need to exclude bmi2-builds from LTO. See:
https://llvm.org/bugs/show_bug.cgi?id=19416
Changes tested and discussed on FishCooking:
https://groups.google.com/forum/?fromgroups=#!topic/fishcooking/acUQtKtEzMM
No functional change.
Marco Costalba [Tue, 22 Nov 2016 06:41:46 +0000 (07:41 +0100)]
Handle Windows Processors Groups
Under Windows it is not possible for a process to run on more than one
logical processor group. This usually means to be limited to use max 64
cores. To overcome this, some special platform specific API should be
called to set group affinity for each thread. Original code from Texel by
Peter Österlund.
Tested by Jean-Paul Vael on a Xeon E7-8890 v4 with 88 threads and confimed
speed up between 44 and 88 threads is about 30%, as expected.
No functional change.
Joost VandeVondele [Sun, 20 Nov 2016 08:56:02 +0000 (09:56 +0100)]
Avoid touching source files in profile-build
This refines the profile-build target to avoid 'touch'ing the sources,
keeping meaningful modification dates and avoiding editor warnings like vi's:
WARNING: The file has been changed since reading it!!!
Do you really want to write to it (y/n)?
Instead of touching sources, the (instrumented) object files are removed,
which has the same effect of rebuilding them in the next step.
As a side effect, this simplifies the Makefile a bit.
No functional change.
Fabian Beuke [Sat, 19 Nov 2016 14:55:30 +0000 (15:55 +0100)]
Reduce variable scope in swap_byte
Added a specialization to remove the 'if' condition
No functional change.
Aram Tumanian [Fri, 11 Nov 2016 15:46:21 +0000 (17:46 +0200)]
Start searching for a repetition from the 4th ply behind
A position can never repeat the one on the previous move.
Thus we can start searching for a repetition from the 4th
ply behind. In the case:
std::min(st->rule50, st->pliesFromNull) < 4
We don't need to do any more calculations. This case happens
very often - in more than a half of all calls of the function.
No functional change.
Alain SAVARD [Sun, 6 Nov 2016 14:38:22 +0000 (09:38 -0500)]
Pawn shelter and pawn storm tuned
Based on SPSA tuned values
Passed STC
http://tests.stockfishchess.org/tests/view/
582363b30ebc5910626b9ca8
LLR: 2.95 (-2.94,2.94) [0.00,4.00]
Total: 40628 W: 7380 L: 7087 D: 26161
and passed LTC
http://tests.stockfishchess.org/tests/view/
5823b73b0ebc5910626b9cb5
LLR: 2.96 (-2.94,2.94) [0.00,4.00]
Total: 273312 W: 35991 L: 35131 D: 202190
bench:
5773672
Marco Costalba [Sat, 19 Nov 2016 08:35:57 +0000 (09:35 +0100)]
Fix compile error from previous patch
Due to different types on some platforms.
No functional change.
Stéphane Nicolet [Mon, 14 Nov 2016 14:07:32 +0000 (15:07 +0100)]
Do not use GCC extension for anonymous unions
Anonymous struct inside anonymous unions are a GCC extension.
This patch uses named structs to stick to the C+11 standard.
Avoids a string of warnings on the Clang compiler.
Non functional change (same bench and same MD5 signature,
so compiled code is exactly the same as in current master)
Joost VandeVondele [Sun, 13 Nov 2016 10:08:30 +0000 (11:08 +0100)]
More accurate 'go nodes' searches at low count
Makes the actual number of nodes searched match closely
the number of nodes requested, by increasing the frequency
of checking the number of nodes searched at low node count.
All other searches retain the default checking frequency of
once per 4096 nodes, and are thus unaffected.
Passed STC as non-regression
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 26643 W: 4766 L: 4655 D: 17222
No functional change.
Stefan Geschwentner [Fri, 11 Nov 2016 08:46:31 +0000 (09:46 +0100)]
Non-quiet pruning tweak
Count in the difference of static evaluation
and alpha for pruning threshold.
STC:
LLR: 2.96 (-2.94,2.94) [0.00,5.00]
Total: 16885 W: 3061 L: 2866 D: 10958
LTC:
LLR: 2.95 (-2.94,2.94) [0.00,5.00]
Total: 33566 W: 4428 L: 4202 D: 24936
Bench:
5513149
Aram Tumanian [Fri, 11 Nov 2016 13:02:28 +0000 (15:02 +0200)]
Make a version of Position::do_move() without the givesCheck parameter
In 10 of 12 calls total to Position::do_move()the givesCheck argument is
simply gives_check(m). So it's reasonable to make an overload without
this parameter, which wraps the existing version.
No functional change.
joergoster [Wed, 9 Nov 2016 15:42:27 +0000 (16:42 +0100)]
FEN parsing: add a second check for correctly setting e.p. square
Currently, we only check if there is a pawn in place
to make the en-passant capture. Now also check that
there is a pawn that could just have advanced two
squares. Also update the corresponding comment.
This makes the parsing of FENs a bit more robust, and
now correctly handles positions like the one reported by Dann Corbit.
position fen rnbqkb1r/ppp3pp/3p1n2/3P4/8/2P5/PP3PPP/RNBQKB1R w KQkq e6
d
+---+---+---+---+---+---+---+---+
| r | n | b | q | k | b | | r |
+---+---+---+---+---+---+---+---+
| p | p | p | | | | p | p |
+---+---+---+---+---+---+---+---+
| | | | p | | n | | |
+---+---+---+---+---+---+---+---+
| | | | P | | | | |
+---+---+---+---+---+---+---+---+
| | | | | | | | |
+---+---+---+---+---+---+---+---+
| | | P | | | | | |
+---+---+---+---+---+---+---+---+
| P | P | | | | P | P | P |
+---+---+---+---+---+---+---+---+
| R | N | B | Q | K | B | | R |
+---+---+---+---+---+---+---+---+
Fen: rnbqkb1r/ppp3pp/3p1n2/3P4/8/2P5/PP3PPP/RNBQKB1R w KQkq - 0 1
No functional change.
Mira [Sun, 6 Nov 2016 14:20:23 +0000 (15:20 +0100)]
Stack offset changed from -5 to -4
Non functional change, tests under sanitizers OK.
Rationales for change
- Offset in code is in range -4 ... 2
- There was an error by (pathological) corner case MAX_PLY=0
No functional change.
atumanian [Mon, 7 Nov 2016 22:34:11 +0000 (00:34 +0200)]
Update comments related after new see_ge()
Update comments according to changes from my patch: #822
No functional change.
Joost VandeVondele [Mon, 7 Nov 2016 12:35:28 +0000 (13:35 +0100)]
Allow benches with more than 2G nodes.
./stockfish bench 128 1
4000000000 default nodes
crashes before, works after.
No functional change.
Joost VandeVondele [Sat, 5 Nov 2016 08:04:51 +0000 (09:04 +0100)]
Fix undefined behaviour with unaligned loads in syzygy code
Casting a pointer to a different type with stricter alignment
requirements yields to implementation dependent behaviour.
Practicaly everything is fine for common platforms because the
CPU/OS/compiler will generate correct code, but anyhow it is
better to be safe than sorry.
Testing with dbg_hit_on() shows that the unalignment accesses are
very rare (below 0.1%) so it makes sense to split the code in a
fast path for the common case and a slower path as a fallback.
No functional change (verified with TB enabled).
ppigazzini [Fri, 4 Nov 2016 13:39:24 +0000 (14:39 +0100)]
Update AUTHORS for SF8
And format top contriutor (space instead of tabs, proper Unix
line endings).
Marco Costalba [Sun, 6 Nov 2016 08:43:40 +0000 (09:43 +0100)]
Fix a warning with debug=no
Warning in TB code due to unused variable.
Verified same bench with TB code enabled.
No functional change.
Joost VandeVondele [Sat, 5 Nov 2016 15:37:29 +0000 (16:37 +0100)]
Reproducible searches after ucinewgame
Fixes issue #859.
thisThread->callsCnt in search<>() was different (by 1) for the first and second game played.
No functional change.
Marco Costalba [Sat, 5 Nov 2016 08:32:05 +0000 (09:32 +0100)]
Restore development version
No functional change.
Marco Costalba [Sat, 5 Nov 2016 08:29:22 +0000 (09:29 +0100)]
Add explicit braces and fix a warning
Warning under both gcc and clang.
No functional change.
VoyagerOne [Fri, 4 Nov 2016 00:29:34 +0000 (20:29 -0400)]
Reduction Simplification
Simplify reduction formula by removing a parameter.
STC:
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 35798 W: 6368 L: 6272 D: 23158
LTC:
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 125375 W: 15827 L: 15839 D: 93709
Bench:
4735038
Joost VandeVondele [Mon, 31 Oct 2016 20:10:31 +0000 (21:10 +0100)]
Makefile fix for sanitize
Small fixes for compilation with sanitize=yes optimize=no,
by always adding -fsanitize=undefined to the LDFLAGS as required.
Updates config-sanity to check&report the status of the flag.
No functional change.
VoyagerOne [Fri, 4 Nov 2016 00:51:16 +0000 (20:51 -0400)]
Top CPU Contributors
Give some well needed credit...
No functional change.
Miroslav Fontán [Thu, 3 Nov 2016 11:04:24 +0000 (12:04 +0100)]
Simplify code, delete else after return
Miroslav Fontán [Thu, 3 Nov 2016 10:45:39 +0000 (11:45 +0100)]
Sync variable names in decl vs def
Joost VandeVondele [Mon, 31 Oct 2016 20:47:15 +0000 (21:47 +0100)]
Travis-ci: integrate perft checking
makes verifying perft numbers for a few positions
part of travis-ci. Adds <5s testing time.
No functional change.
Marco Costalba [Sat, 16 Jul 2016 06:10:45 +0000 (08:10 +0200)]
Rewrite syzygy in C++
Rewrite the code in SF style, simplify and
document it.
Code is now much clear and bug free (no mem-leaks and
other small issues) and is also smaller (more than
600 lines of code removed).
All the code has been rewritten but root_probe() and
root_probe_wdl() that are completely misplaced and should
be retired altogheter. For now just leave them in the
original version.
Code is fully and deeply tested for equivalency both in
functionality and in speed with hundreds of games and
test positions and is guaranteed to be 100% equivalent
to the original.
Tested with tb_dbg branch for functional equivalency on
more than 12M positions.
stockfish.exe bench 128 1 16 syzygy.epd
Position: 2016/2016
Total
12121156 Hits 0 hit rate (%) 0
Total time (ms) :
4417851
Nodes searched :
1100151204
Nodes/second : 249024
Tested with 5,000 games match against master, 1 Thread,
128 MB Hash each, tc 40+0.4, which is almost equivalent
to LTC in Fishtest on this machine. 3-, 4- and 5-men syzygy
bases on SSD, 12-moves opening book to emphasize mid- and endgame.
Score of SF-SyzygyC++ vs SF-Master: 633 - 617 - 3750 [0.502] 5000
ELO difference: 1
No functional change.
Marco Costalba [Tue, 1 Nov 2016 09:19:17 +0000 (10:19 +0100)]
Stockfish 8
Bench:
5926706
No functional change
Stefan Geschwentner [Thu, 27 Oct 2016 10:56:32 +0000 (12:56 +0200)]
Bonus for attacked passed pawn promotion path
Bonus for each attacked square on the promotion path
of an enemy passed pawn.
STC:
LLR: 2.96 (-2.94,2.94) [0.00,5.00]
Total: 141511 W: 25295 L: 24579 D: 91637
LTC:
LLR: 2.95 (-2.94,2.94) [0.00,5.00]
Total: 23161 W: 3022 L: 2831 D: 17308
Bench:
5926706
Joost Vandevondele [Fri, 21 Oct 2016 04:48:07 +0000 (06:48 +0200)]
Fix a series of undefined behaviours
Avoid shifting negative signed integers and use typed
enum to avoids decrementing a variable beyond its defined
range, like:
for (Rank r = RANK_8; r >= RANK_1; --r)
Changes were tested individually and passed SPRT[-3, 1].
With this patch gcc --sanitize builds cleanly.
No functional change.
Joost VandeVondele [Wed, 26 Oct 2016 19:24:26 +0000 (21:24 +0200)]
travis-ci: Enable undefined behavior checking
syzygy [Wed, 26 Oct 2016 21:01:11 +0000 (23:01 +0200)]
Output PV if last iteration does not complete
Instead of outputting "info nodes ... time ..." when the last
iteration is interrupted, simply call UCI::pv() to output the PV.
I thought about calling UCI:pv() with bounds -VALUE_INFINITE, VALUE_INFINITE
to avoid "lowerbound" or "upperbound" appearing in it, but I'm not sure that
would be any better.
This patch fixes rare inconsistencies between the first move of
the last PV output and the bestmove played. It also makes sure
that all the latest statistics are sent to the GUI (not only nodes
and time but also nps, tbhits, hashfull).
No functional change.
Stéphane Nicolet [Mon, 24 Oct 2016 20:09:09 +0000 (22:09 +0200)]
Endgame malus for having a king in a pawnless flank
Original idea by "ElbertoOne", while "FauziAkram" suggested to put a
small midgame penalty too.
STC:
LLR: 2.95 (-2.94,2.94) [0.00,5.00]
Total: 71808 W: 13038 L: 12610 D: 46160
LTC:
LLR: 2.95 (-2.94,2.94) [0.00,5.00]
Total: 150874 W: 19828 L: 19221 D: 111825
Bench:
6077005
VoyagerOne [Mon, 24 Oct 2016 14:05:02 +0000 (10:05 -0400)]
History Stat Comparison
Adjust LMR by comparing history stats
with opponent (prior ply).
STC:
LLR: 2.96 (-2.94,2.94) [0.00,5.00]
Total: 27754 W: 5066 L: 4824 D: 17864
LTC:
LLR: 2.95 (-2.94,2.94) [0.00,5.00]
Total: 216596 W: 28157 L: 27343 D: 161096
Bench:
5437729
Marco Costalba [Sat, 22 Oct 2016 06:21:38 +0000 (08:21 +0200)]
Correcty resey TB hit counter
Restore original behaviour to reset
the counter before a new move search.
Also fixed some warnings and added const
qualifier to a couple of functions, as
suggested by m_stembera.
Thanks to Werner Bergmans for reporting
the regression.
No functional change.
syzygy [Thu, 20 Oct 2016 19:16:09 +0000 (21:16 +0200)]
Per-thread TB hit counters
Use a per-thread counter to reduce contention
with many cores and endgame positions.
Measured around 1% speed-up on a 12 core and 8%
on 28 cores with 6-men, searching on:
7R/1p3k2/2p2P2/3nR1P1/8/3b1P2/7K/r7 b - - 3 38
Also retire the unused set_nodes_searched() and fix
a couple of return types and naming conventions.
No functional change.
Joost Vandevondele [Sun, 16 Oct 2016 13:20:05 +0000 (15:20 +0200)]
Simplify next_move by always scoring evasions
For a default bench, this fixes the last valgrind
error (jump on uninitialised value).
Passed STC:
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 187869 W: 33303 L: 33463 D: 121103
No functional change.
Joost Vandevondele [Wed, 19 Oct 2016 19:29:00 +0000 (21:29 +0200)]
Make valgrind testing part of travis ci.
ajithcj [Sat, 15 Oct 2016 07:29:24 +0000 (07:29 +0000)]
Remove useless assignments to currentMove
We reference (ss-1)->currentMove, i.e. we peek
current move of the parent node, so currentMove
should be valid in the main move loop, when we
search() the subtree, but outside of main loop
it is useless.
No functional change.
VoyagerOne [Sat, 15 Oct 2016 21:35:10 +0000 (17:35 -0400)]
Use explicit logic for pruning
Also a speedup since we don't need to recalculate SEE
for extensions...as it already determined to be positive.
Results for 12 tests for each version:
Base Test Diff
Mean
2132395 2191002 -58607
StDev 128058 85917 134239
p-value: 0.669
speedup: 0.027
Non functional change.
Jacques [Sat, 8 Oct 2016 10:15:43 +0000 (12:15 +0200)]
Fixes for ARM compilation: take 2
The target:
Odroid U3 (http://www.hardkernel.com/main/products/prdt_info.php?g_code=g138745696275)
Debian Jessie
As listed in #550 and #638 three modifications are needed for compilation to work:
float-abi flag for GCC If an FPU is present and supported by the installed os then passed value need to be hard.
I didn't find any better solution than using readelf to check for the availibilty of Tag_ABI_VFP_args which sould indicate support for the FPU. The check is only done if the arch is arm and if readelf is not present
on the system, there will be an error (/bin/sh: 1: readelf: not found) but it will not break and will continue with the default softfp value. Outputing the error is not really acceptable but I wanted some feedback on the
check itself.
-lpthread is needed on armv7 outside of Android
I replaced UNAME with KERNEL and OS to allow to differentiate Android.
m32 flag
My understanding is that outside of Android the flag is generating errors on armv7.
These modifications should introduce change only for non Android armv7 build.
No functional change.
Marco Costalba [Thu, 13 Oct 2016 06:36:30 +0000 (08:36 +0200)]
Revert "Fixes for ARM compilation"
This reverts commit
a3fe80c36ac8ee7677d1f6b7df9b2497e3f755c5.
Break compilation on mingw for me.
Jacques [Sat, 8 Oct 2016 10:15:43 +0000 (12:15 +0200)]
Fixes for ARM compilation
The target:
Odroid U3 (http://www.hardkernel.com/main/products/prdt_info.php?g_code=g138745696275)
Debian Jessie
As listed in #550 and #638 three modifications are needed for compilation to work:
float-abi flag for GCC If an FPU is present and supported by the installed os then passed value need to be hard.
I didn't find any better solution than using readelf to check for the availibilty of Tag_ABI_VFP_args which sould indicate support for the FPU. The check is only done if the arch is arm and if readelf is not present
on the system, there will be an error (/bin/sh: 1: readelf: not found) but it will not break and will continue with the default softfp value. Outputing the error is not really acceptable but I wanted some feedback on the
check itself.
-lpthread is needed on armv7 outside of Android
I replaced UNAME with KERNEL and OS to allow to differentiate Android.
m32 flag
My understanding is that outside of Android the flag is generating errors on armv7.
These modifications should introduce change only for non Android armv7 build.
No functional change.
Marco Costalba [Mon, 10 Oct 2016 15:36:59 +0000 (17:36 +0200)]
AppVeyor: run bench after build
And show resulting bench signature.
The run is very slow becuase optimizations
are all disabled by default /Od /RTC1
No functional change.
Marco Costalba [Mon, 10 Oct 2016 12:21:57 +0000 (14:21 +0200)]
Add AppVeyor integration
It is like Trevis CI but for Windows platform.
Currently just compile builds, wthouth benching
the resulting executable.
No functional change.
ajithcj [Sat, 8 Oct 2016 05:06:33 +0000 (05:06 +0000)]
Simplify futility pruning return value
Return eval as it is while doing futility pruning.
STC:
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 167687 W: 29778 L: 29904 D: 108005
LTC:
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 26905 W: 3503 L: 3390 D: 20012
Bench:
5936728
atumanian [Thu, 6 Oct 2016 17:55:10 +0000 (20:55 +0300)]
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.
Stéphane Nicolet [Wed, 5 Oct 2016 22:00:27 +0000 (00:00 +0200)]
Do not use SEE in evasion scoring
Idea by Aram Tumanian (atumanian)
STC:
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 43889 W: 7849 L: 7767 D: 28273
LTC:
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 29333 W: 3809 L: 3700 D: 21824
Bench:
6421663
Stefano Cardanobile [Fri, 30 Sep 2016 18:50:42 +0000 (20:50 +0200)]
Retire implicit malus for stonewalls
STC:
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 75864 W: 13466 L: 13437 D: 48961
LTC:
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 99050 W: 12472 L: 12451 D: 74127
bench:
6098474
VoyagerOne [Mon, 3 Oct 2016 13:36:40 +0000 (09:36 -0400)]
Allow inCheck pruning
This is a bit tricky because we don't want
to prune the only legal evasions, even if
with negative SEE. So add an assert to avoid
this subtle bug to slip in later.
STC:
LLR: 2.96 (-2.94,2.94) [0.00,4.00]
Total: 14140 W: 2625 L: 2421 D: 9094
LTC:
LLR: 2.95 (-2.94,2.94) [0.00,4.00]
Total: 11558 W: 1555 L: 1379 D: 8624
bench:
5256717
Marco Costalba [Thu, 29 Sep 2016 13:24:36 +0000 (15:24 +0200)]
Remove useless razoring condition
Condition is always true! For any value of the
array index! Even an out of bound array, like
razor_margin[120]!!!!
No functional change.
HiraokaTakuya [Wed, 28 Sep 2016 22:11:03 +0000 (07:11 +0900)]
Make razor_margin[4] ONE_PLY value independent
No functional change.
Stéphane Nicolet [Fri, 23 Sep 2016 17:28:34 +0000 (19:28 +0200)]
Rename shift_bb() to shift()
Rename shift_bb() to shift(), and DELTA_S to SOUTH, etc.
to improve code readability, especially in evaluate.cpp
when they are used together:
old b = shift_bb<DELTA_S>(pos.pieces(PAWN))
new b = shift<SOUTH>(pos.pieces(PAWN))
While there fix some small code style issues.
No functional change.
joergoster [Wed, 21 Sep 2016 12:02:35 +0000 (14:02 +0200)]
Allowing singular extension in mate positions
Drop useless condition
abs(ttValue) < VALUE_KNOWN_WIN
And extend singular extension search to cases when ttValue
stores a mate score. This improves mate finding and does
not introduce any regression.
Yery tested this patch against current master on the 6500+
Chest mate suite with 200K fixed nodes:
shortest mates found: master: 1206 patch:1205
any mate found: master: 1903 patch: 2003
with 1 sec time:
shortest mates found: master: 2667 patch: 2628
any mate found: master: 3585 patch: 3646
Verified for no regression:
STC
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 25655 W: 4578 L: 4465 D: 16612
LTC
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 66247 W: 8618 L: 8557 D: 49072
bench:
6335042
Marco Costalba [Sat, 24 Sep 2016 05:30:37 +0000 (07:30 +0200)]
Fix crash when passing a mate/stalemate position
Both Tablebases::filter_root_moves() and
extract_ponder_from_tt(9 were unable to handle
a mate/stalemate position.
Spotted and reported by Dann Corbit.
Added some mate/stalemate positions to bench so
to early catch this regression in the future.
No functional change.
Stéphane Nicolet [Wed, 21 Sep 2016 07:32:00 +0000 (09:32 +0200)]
Simplify pinners conditions in SEE()
Use the following transformations:
- to check that A is included in B, testing "(A & ~B) == 0" is faster
than "(A & B) == A"
- to remove the intersection of A and B from A, doing "A &= ~B;" is as
fast as "if (A & B) A &= ~B;" but is simpler.
Overall, the simpler patch version is 0.3% than current master.
No functional change.
Guenther Demetz [Mon, 19 Sep 2016 06:21:41 +0000 (08:21 +0200)]
Fix pin-aware SEE
Correct pinners calculation and fix bug with pinned
pieces giving check. With this patch 'pinners' only
returns sliders with exactly one defensive piece between
the slider and the attacked square (in other words, pinners
returns exact pinners).
This was a co-operation between Marco Costalba,
Stéphane Nicolet and me.
Special thanks to Ronald de Man for reporting the bug with
pinned pieces giving check, discussed here:
https://groups.google.com/forum/?fromgroups=#!topic/fishcooking/S_4E_Xs5HaE
STC:
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 132118 W: 23578 L: 23645 D: 84895
LTC:
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 36424 W: 4770 L: 4670 D: 26984
bench:
6272231
Joost Vandevondele [Sat, 17 Sep 2016 11:37:11 +0000 (13:37 +0200)]
Use fixed depth bench to make PGO builds more reproducible
Discussed on fishcooking
proposal and objdump verification:
https://groups.google.com/d/msg/fishcooking/4_ausUwMXP0/EGPsMYqOFAAJ
verified no significant speed difference between depth and time:
https://groups.google.com/d/msg/fishcooking/4_ausUwMXP0/KazW5QZmFgAJ
stockfish_time - stats:
mean =
2207232.56 std = 7079.51 std/mean = 0.003207
stockfish_depth - stats:
mean =
2201783.57 std = 6356.69 std/mean = 0.002887
No functional change
Marco Costalba [Sat, 17 Sep 2016 08:13:38 +0000 (10:13 +0200)]
Fix a warning with MSVC
warning C4706: assignment within conditional expression
No functional change.
Stéphane Nicolet [Fri, 16 Sep 2016 16:18:53 +0000 (18:18 +0200)]
Swap mg and eg in internal representation of Score
Instrumentation shows that in make_score(mg, eg) calls, the mg value is
zero in 25,9% of the calls while the eg value is zero in 36,8% of the
calls.
Swapping the internal fields of mg and eg in the internal
representation of Score allows the compiler to optimize away the shift
in (eg << 16) + mg in more cases, thus resulting in a 0.3% speed-up
overall.
No functional change
Marco Costalba [Sat, 17 Sep 2016 06:19:06 +0000 (08:19 +0200)]
Fix indentation in struct FromToStats
And other little trivial stuff.
No functional change.
Stéphane Nicolet [Wed, 7 Sep 2016 21:37:06 +0000 (23:37 +0200)]
Retire KingDanger array
Rescales the king danger variables in evaluate_king() to
suppress the KingDanger[] array. This avoids the cost of
the memory accesses to the array and simplifies the non-linear
transformation used.
Full credits to "hxim" for the seminal idea and implementation,
see pull request #786.
https://github.com/official-stockfish/Stockfish/pull/786
Passed STC:
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 9649 W: 1829 L: 1689 D: 6131
Passed LTC:
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 53494 W: 7254 L: 7178 D: 39062
Bench:
6116200
Marco Costalba [Mon, 29 Aug 2016 07:11:20 +0000 (09:11 +0200)]
Use per-thread counterMoveHistory
Drops a scalability bottleneck due to memory contention
of a single shared table across threads. The effect starts
to be sensible with a high number of threads. Specifically
we have a small regression with 7 threads both at 60 and
180 seconds TC:
10000 @ 60+0.6 th 7
ELO: -2.46 +-3.2 (95%) LOS: 6.5%
Total: 9896 W: 1037 L: 1107 D: 7752
5000 @ 180+0.6 th 7
ELO: -1.95 +-4.1 (95%) LOS: 17.7%
Total: 5000 W: 444 L: 472 D: 4084
We have a regression because counterMoveHistory table is
quite big and it takes time for a single thread to fill it.
Sharing the table yields to a higher fill rate and better
quality of moves and up to 7 threads the benefits of sharing
more then compensate the loss in speed due to contention.
Interestingly even with a 3X longer TC, so with more time
for the single thread to catch up, the improvment is quite
limited and below noise level. It seems we really need much
longer TC to saturate the table.
When we move to high threads number it's another story:
5000 @ 60+0.6 th 22
ELO: 3.49 +-4.3 (95%) LOS: 94.6%
Total: 4880 W: 490 L: 441 D: 3949
2000 @ 60+0.6 th 32
ELO: 8.34 +-6.9 (95%) LOS: 99.1%
Total: 2000 W: 229 L: 181 D: 1590
As expected the speed-up more than compensates the filling
rate, and we expect that with tournament TC, where single
thread is able to saturate the table, the difference will
be even stronger. For instance for TCEC 9 super-final time
control will be 180 minutes + 15 seconds and this scalability
improvement seems definitely the way to go.
So, summarizing:
GOOD:
Measured big improvement in high core scenario
Suitable for TCEC 9 superfinal (big hardware, very long TC)
Consistent and natural patch that extends to counterMoveHistory
what we already do for remaining history tables, that are all per-thread
Non functional change for the common case of a single core
Very simple (just 6 lines modified, no added ones)
BAD:
Small regression (within 2-3 ELO) with few threads and short TC
bench:
5341477
Marco Costalba [Thu, 15 Sep 2016 06:38:20 +0000 (08:38 +0200)]
Renaming in MovePicker
Rename stages and simplify a bit the code.
No functional change.
Marco Costalba [Wed, 14 Sep 2016 13:43:56 +0000 (15:43 +0200)]
Retire MovePicker::see_sign()
No more used after last patch.
No functional change.
VoyagerOne [Wed, 14 Sep 2016 13:09:41 +0000 (09:09 -0400)]
Tweak SEE margin in pruning conditions
Use 35 * depth^2 to calculate see_margin.
STC:
LLR: 2.95 (-2.94,2.94) [0.00,5.00]
Total: 22636 W: 4212 L: 3990 D: 14434
LTC:
LLR: 2.96 (-2.94,2.94) [0.00,5.00]
Total: 47241 W: 6314 L: 6041 D: 34886
The Movepick SEE is now dead code, retire it.
Bench:
5341477
syzygy [Sat, 10 Sep 2016 19:37:36 +0000 (21:37 +0200)]
Integrate next_stage() logic into next_move()
Measured bench speed up goes from 0,7% to 2%,
given the unreliable measure a reverse simmplification
test was done on fishtest:
master vs patch
LLR: -2.94 (-2.94,2.94) [-3.00,1.00]
Total: 15499 W: 2685 L: 2867 D: 9947
Test result is positive, master is weaker.
No functional change.
Guenther Demetz [Mon, 12 Sep 2016 12:30:52 +0000 (14:30 +0200)]
Simplify code for pinaware SEE
This is the most compact and neatest version
is was able to produce.
On normal builds I have a small slowdown:
normal builds base vs. simplification (gcc 4.8.1 Win7-64 i7-3770 @ 3.4GHz x86-64-modern)
Results for 20 tests for each version:
Base Test Diff
Mean
1974744 1969333 5411
StDev 11825 10281 5874
p-value: 0,178
speedup: -0,003
On pgo-builds however I measure a nice 1.1% speedup
pgo-builds base vs. simplification
Results for 20 tests for each version:
Base Test Diff
Mean
1974119 1995444 -21325
StDev 8703 5717 4623
p-value: 1
speedup: 0,011
No functional change.
Guenther Demetz [Mon, 12 Sep 2016 06:47:19 +0000 (08:47 +0200)]
Pinned aware SEE
Don't allow pinned pieces to attack the exchange-square as long all
pinners (this includes also potential ones) are on their original
square.
As soon a pinner moves to the exchange-square or get captured on it, we
fall back to standard SEE behaviour.
This correctly handles the majority of cases with absolute pins.
bench:
6883133
Stefano Cardanobile [Sat, 10 Sep 2016 15:23:26 +0000 (17:23 +0200)]
Reorder evaluation start
In evaluate, we start by initializing the pos.psq_score
and adding the material imbalance. After that, we check
whether a specialized eval exists and if yes we return
that value and discard whatever we have computed until now.
It sounds more logical to first probe material entry and
return if we have a specialized eval, and only if it is
not the case initialize eval with some values. There is
no measurable speed-difference on my computer.
Non functional change.
Marco Costalba [Fri, 9 Sep 2016 06:38:44 +0000 (08:38 +0200)]
Use Movepick SEE value in search
This halves the calls to the costly pos.see_sign(),
speed up is about 1-1.3%
Non functional change.
Marco Costalba [Thu, 8 Sep 2016 03:57:52 +0000 (05:57 +0200)]
Refactor previous patch
No functional change.
ajithcj [Thu, 8 Sep 2016 03:51:41 +0000 (05:51 +0200)]
Prune dangerous moves at low depth
At very low depths prune captures,
promotions and checks if see is negative.
STC:
LLR: 2.95 (-2.94,2.94) [0.00,5.00]
Total: 6772 W: 1328 L: 1173 D: 4271
LTC:
LLR: 2.95 (-2.94,2.94) [0.00,5.00]
Total: 8917 W: 1270 L: 1122 D: 6525
bench:
6024713
Marco Costalba [Sun, 4 Sep 2016 13:29:11 +0000 (15:29 +0200)]
Syntactic sugar to loop across pieces
Also add some comments to the new operator~(Piece).
No functional change.