]> git.sesse.net Git - stockfish/log
stockfish
7 years agoStormDanger CleanUp (#964)
Rocky640 [Wed, 11 Jan 2017 07:56:38 +0000 (02:56 -0500)]
StormDanger CleanUp (#964)

Order the enum and the array the same way they appear around line 250.
Makes it much easier to follow.

Add comments in the array definition and critical rows.
Use same terminology as elsewhere in pawns.cpp

No functional change.

7 years agoAdjust copyright headers to 2017 (#965)
Joost VandeVondele [Wed, 11 Jan 2017 07:46:29 +0000 (08:46 +0100)]
Adjust copyright headers to 2017 (#965)

No functional change.

7 years agoTravis: fix bench fetch in case of PR (#968)
Marco Costalba [Wed, 11 Jan 2017 07:44:06 +0000 (08:44 +0100)]
Travis: fix bench fetch in case of PR (#968)

When Travis tests a PR, a commit merge is created
but master branch is not updated, although HEAD is.

No functional change.

7 years agoRename FromTo -> History (#963)
lucasart [Tue, 10 Jan 2017 07:47:56 +0000 (15:47 +0800)]
Rename FromTo -> History (#963)

Previously, we had duplicated History:

- one with (piece,to) called History
- one with (from,to) called FromTo

Now that we have only one, rename it to History, which is the generally accepted
name in the chess programming litterature for this technique.

Also correct some comments that had not been updated since the introduction of CMH.

No functional change.

7 years agoRemove HistoryStats
lucasart [Mon, 9 Jan 2017 10:57:34 +0000 (18:57 +0800)]
Remove HistoryStats

STC:
LLR: 3.44 (-2.94,2.94) [-3.00,1.00]
Total: 120831 W: 21572 L: 21594 D: 77665

LTC:
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 26565 W: 3519 L: 3406 D: 19640

bench 5920493

7 years agoFix previous patch for OS X (#961)
Marco Costalba [Mon, 9 Jan 2017 14:37:09 +0000 (15:37 +0100)]
Fix previous patch for OS X (#961)

Use posix version of sed that is available on all
platforms.

No functional change.

7 years agoTrevis CI: use commit bench number as a reference
Marco Costalba [Mon, 9 Jan 2017 11:40:07 +0000 (12:40 +0100)]
Trevis CI: use commit bench number as a reference

No functional change.

7 years agoNew shell scripts for testing, used for travis CI (#957)
Joost VandeVondele [Mon, 9 Jan 2017 09:30:57 +0000 (10:30 +0100)]
New shell scripts for testing, used for travis CI (#957)

Perform more complex verification and validation.

- signature.sh : extract and optionally compare Bench/Signature/Node count.
- perft.sh : verify perft counts for a number of positions.
- instrumented.sh : run a few commands or uci sequences through valgrind/sanitizer instrumented binaries.
- reprosearch.sh : verify reproducibility of search.

These script can be used from directly from the command line in the src directory.

Update travis script to use these shell scripts.

No functional change.

7 years agoSimplified select best thread (#958)
ElbertoOne [Mon, 9 Jan 2017 09:26:50 +0000 (10:26 +0100)]
Simplified select best thread (#958)

Only select best thread if score is better and depth equal or larger.

STC (7 threads): http://tests.stockfishchess.org/tests/view/586a4d090ebc5903140c64b2
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 120297 W: 18652 L: 18682 D: 82963

LTC (7 threads): http://tests.stockfishchess.org/tests/view/586e31b30ebc5903140c663d
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 57187 W: 7035 L: 6959 D: 43193

bench: 4940355

7 years agoDrop Stats c'tors
Marco Costalba [Sat, 7 Jan 2017 09:13:49 +0000 (10:13 +0100)]
Drop Stats c'tors

Now taht we correctly value-initialize Thread objects,
we don't need c'tors anymore because tables will be
zero-initialized by the compier when Thread object
is instanced.

Verified that we have no errors with Valgrind.

No functional change.

7 years agoCorrectly zero-initialize MainThread
Joost VandeVondele [Fri, 6 Jan 2017 15:16:07 +0000 (16:16 +0100)]
Correctly zero-initialize MainThread

It can be used uninitialized in time management.
Fixes all valgrind errors on './stockfish go wtime 8000 btime 8000 winc 500 binc 500'

This is one (of the many) quirks of C++. There is a subtle difference between:

new Foo
new Foo()

The first statement calls the default constructor (that in case of a POD leaves data members
uninitialized), the second one performs a value-initialization (that in case of POD is
equivalent to a zero-initialization)

See:
http://stackoverflow.com/questions/620137/do-the-parentheses-after-the-type-name-make-a-difference-with-new
http://stackoverflow.com/questions/5116541/difference-between-creating-object-with-or-without

No functional change.

7 years agoZero init fromToStats in constructor. (#953)
Joost VandeVondele [Fri, 6 Jan 2017 09:43:18 +0000 (10:43 +0100)]
Zero init fromToStats in constructor. (#953)

Extend commit fe99de to fromToStats, which fixes the last valgrind errors on
a simple 'go depth 12' at startup.

No functional change.

7 years agoRejoin lines that belong to HalfDensity map (#952)
pb00068 [Thu, 5 Jan 2017 08:00:41 +0000 (09:00 +0100)]
Rejoin lines that belong to HalfDensity map (#952)

No functional change.

7 years agoCorrect zero-init of Thread data members
Marco Costalba [Thu, 5 Jan 2017 07:50:17 +0000 (08:50 +0100)]
Correct zero-init of Thread data members

If not explicitly initialized in a class constructor,
then all data members are default-initialized when
the corresponing struct/class is instanced.

For array and built-in types (int, char, etc..)
default-initialization is a no-op and we need to
explicitly zero them.

No functional change.

7 years agoUse consistent variable names for counterMoveStats (#949)
Joost VandeVondele [Mon, 2 Jan 2017 08:36:43 +0000 (09:36 +0100)]
Use consistent variable names for counterMoveStats (#949)

Unify naming in movepick and search, by adopting the latter convention (cmh,fmh,fmh2).

No functional change.

7 years agoSimplify unstoppable again (#950)
Stéphane Nicolet [Mon, 2 Jan 2017 08:33:40 +0000 (09:33 +0100)]
Simplify unstoppable again (#950)

Assign a small bonus for our passed pawns when the opponent has no
pieces left.

STC:
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 51124 W: 9036 L: 8966 D: 33122

LTC:
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 114560 W: 14604 L: 14604 D: 85352

Bench: 4940355

7 years agoTweak best thread selection logic
Jonathan Calovski [Sat, 31 Dec 2016 15:09:22 +0000 (02:09 +1100)]
Tweak best thread selection logic

STC 7 threads:
LLR: 2.96 (-2.94,2.94) [0.00,5.00]
Total: 26881 W: 4161 L: 3941 D: 18779
http://tests.stockfishchess.org/tests/view/58667a830ebc5903140c632f

LTC 7 threads:
LLR: 2.95 (-2.94,2.94) [0.00,5.00]
Total: 22988 W: 2767 L: 2583 D: 17638
http://tests.stockfishchess.org/tests/view/586722690ebc5903140c636d

bench: 5468995

7 years agoWDL: rename WDLCursedLoss into WDLBlessedLoss
lucasart [Sun, 1 Jan 2017 10:11:52 +0000 (18:11 +0800)]
WDL: rename WDLCursedLoss into WDLBlessedLoss

Tested using syzygy bench method:

- 2016 random positions ranging between 3 and 10 pieces
- each searched using bench at depth=10

Same node count (and no speed regression).

No functional change.

7 years agoDon't clear EasyMove in search()
Aram Tumanian [Wed, 21 Dec 2016 11:40:55 +0000 (13:40 +0200)]
Don't clear EasyMove in search()

EasyMove is cleared after every iteration of the
search if the 3rd move in the PV of the main thread
changes from the previous iteration. Therefore,
clearing EasyMove during a search iteration may be
excessive. The tests show that this is indeed unnecessary.
In the new version the EasyMove variable is used only in
the Thread::search function.

STC
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 47719 W: 8438 L: 8362 D: 30919

LTC
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 122841 W: 15448 L: 15457 D: 91936

bench: 5468995

7 years agoThreefold repetition detection
Sergei Antonov [Mon, 12 Dec 2016 15:04:16 +0000 (16:04 +0100)]
Threefold repetition detection

Implement a threefold repetition detection. Below are the examples of
problems fixed by this change.

    Loosing move in a drawn position.
    position fen 8/k7/3p4/p2P1p2/P2P1P2/8/8/K7 w - - 0 1 moves a1a2 a7a8 a2a1
    The old code suggested a loosing move "bestmove a8a7", the new code suggests "bestmove a8b7" leading to a draw.

    Incorrect evaluation (happened in a real game in TCEC Season 9).
    position fen 4rbkr/1q3pp1/b3pn2/7p/1pN5/1P1BBP1P/P1R2QP1/3R2K1 w - - 5 31 moves e3d4 h8h6 d4e3
    The old code evaluated it as "cp 0", the new code evaluation is around "cp -50" which is adequate.

Brings 0.5-1 ELO gain. Passes [-3.00,1.00].

STC: http://tests.stockfishchess.org/tests/view/584ece040ebc5903140c5aea
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 47744 W: 8537 L: 8461 D: 30746

LTC: http://tests.stockfishchess.org/tests/view/584f134d0ebc5903140c5b37
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 36775 W: 4739 L: 4639 D: 27397

Patch has been rewritten into current form for simplification and
logic slightly changed so that return a draw score if the position
repeats once earlier but after or at the root, or repeats twice
strictly before the root. In its original form, repetition at root
was not returned as an immediate draw.

After retestimng testing both version with SPRT[-3, 1], both passed
succesfully, but this version was chosen becuase more natural. There is
an argument about MultiPV in which an extended draw at root may be sensible.
See discussion here:

   https://github.com/official-stockfish/Stockfish/pull/925

For documentation, current version passed both at STC and LTC:

STC
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 51562 W: 9314 L: 9245 D: 33003

LTC
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 115663 W: 14904 L: 14906 D: 85853

bench: 5468995

7 years agoSmall eval cleanup and renaming
Alain SAVARD [Wed, 28 Dec 2016 22:14:09 +0000 (17:14 -0500)]
Small eval cleanup and renaming

Non-functional changes

a) splitting the threat array to avoid using an enum
b) reorder the scores according to functions where they are used.
c) declarations in evaluate_pieces after the const(s) like elsewhere
d) more compact definitions of KingFlank,
now that we need it also for the PanwLessFlank penalty.
e) reuse CenterFiles in evaluate_space
f) move one line inside next popcount

No functional change.

7 years agoRemove SafeCheck (#946)
lucasart [Sat, 31 Dec 2016 12:52:42 +0000 (20:52 +0800)]
Remove SafeCheck (#946)

It was a bit of a hack, without intrinsic value, but rather compensating for the
fact that checks were mistuned.

STC:
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 88308 W: 15553 L: 15545 D: 57210

LTC:
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 53115 W: 6741 L: 6662 D: 39712

bench 5468995

7 years agoFurther simplify unstoppable (#938)
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

7 years agoFix psqt format and use smaller numbers in king psqt (#940)
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.

7 years agoExplicitly use alpha+1 for beta in NonPV search (#939)
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.

7 years agoSimplify threshold handling for probcut. (#936)
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

7 years agopiecesCount (#932)
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.

7 years agoUse DEPTH_ZERO initializer for depth in qsearch (#931)
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.

7 years agoAnother simplification for SEE pruning
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

7 years agoSimplify pruning
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

7 years agoClean-up skipEarlyPruning (#921)
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.

7 years agoSimplify unstoppable condition
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

7 years agoRefactor bonus and penalty calculation (#917)
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)

7 years agoPawn flank attacks
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

7 years agoRemove piece condition in decrease lmr reduction check
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

7 years agoHelp GCC to optimize msb() to single instruction
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.

7 years agoSimplify pruning rule
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

7 years agoWeakQueen Parameter tweak
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

7 years agoTrappedRook simplification
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

7 years agoFix PGO build with GCC (#904)
theo77186 [Sun, 27 Nov 2016 13:43:52 +0000 (14:43 +0100)]
Fix PGO build with GCC (#904)

7 years agoFix PGO Build for clang
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.

7 years agoFix trace in case of space evaluation
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.

7 years agoFix regression: print const position
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.

7 years agoRank based threats
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

7 years agoFix undefined behavior
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.

7 years agoFix compile under Windows XP
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.

7 years agoFix the pawn hash failure when the pawn key is 0
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.

7 years agoCleanup Makfile for MacOs
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.

7 years agoHandle Windows Processors Groups
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.

7 years agoAvoid touching source files in profile-build
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.

7 years agoReduce variable scope in swap_byte
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.

7 years agoStart searching for a repetition from the 4th ply behind
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.

7 years agoPawn shelter and pawn storm tuned
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

7 years agoFix compile error from previous patch
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.

7 years agoDo not use GCC extension for anonymous unions
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)

7 years agoMore accurate 'go nodes' searches at low count
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.

7 years agoNon-quiet pruning tweak
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

7 years agoMake a version of Position::do_move() without the givesCheck parameter
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.

7 years agoFEN parsing: add a second check for correctly setting e.p. square
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.

7 years agoStack offset changed from -5 to -4
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.

7 years agoUpdate comments related after new see_ge()
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.

7 years ago Allow benches with more than 2G nodes.
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.

7 years agoFix undefined behaviour with unaligned loads in syzygy code
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).

7 years agoUpdate AUTHORS for SF8
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).

7 years agoFix a warning with debug=no
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.

7 years agoReproducible searches after ucinewgame
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.

7 years agoRestore development version
Marco Costalba [Sat, 5 Nov 2016 08:32:05 +0000 (09:32 +0100)]
Restore development version

No functional change.

7 years agoAdd explicit braces and fix a warning
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.

7 years agoReduction Simplification
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

7 years agoMakefile fix for sanitize
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.

7 years agoTop CPU Contributors
VoyagerOne [Fri, 4 Nov 2016 00:51:16 +0000 (20:51 -0400)]
Top CPU Contributors

Give some well needed credit...

No functional change.

7 years agoSimplify code, delete else after return
Miroslav Fontán [Thu, 3 Nov 2016 11:04:24 +0000 (12:04 +0100)]
Simplify code, delete else after return

7 years agoSync variable names in decl vs def
Miroslav Fontán [Thu, 3 Nov 2016 10:45:39 +0000 (11:45 +0100)]
Sync variable names in decl vs def

7 years agoTravis-ci: integrate perft checking
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.

7 years agoRewrite syzygy in C++
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.

8 years agoStockfish 8
Marco Costalba [Tue, 1 Nov 2016 09:19:17 +0000 (10:19 +0100)]
Stockfish 8

Bench: 5926706

No functional change

8 years agoBonus for attacked passed pawn promotion path
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

8 years agoFix a series of undefined behaviours
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.

8 years agotravis-ci: Enable undefined behavior checking
Joost VandeVondele [Wed, 26 Oct 2016 19:24:26 +0000 (21:24 +0200)]
travis-ci: Enable undefined behavior checking

8 years agoOutput PV if last iteration does not complete
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.

8 years agoEndgame malus for having a king in a pawnless flank
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

8 years agoHistory Stat Comparison
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

8 years agoCorrecty resey TB hit counter
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.

8 years agoPer-thread TB hit counters
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.

8 years agoSimplify next_move by always scoring evasions
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.

8 years agoMake valgrind testing part of travis ci.
Joost Vandevondele [Wed, 19 Oct 2016 19:29:00 +0000 (21:29 +0200)]
Make valgrind testing part of travis ci.

8 years agoRemove useless assignments to currentMove
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.

8 years agoUse explicit logic for pruning
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.

8 years agoFixes for ARM compilation: take 2
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.

8 years agoRevert "Fixes for ARM compilation"
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.

8 years agoFixes for ARM compilation
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.

8 years agoAppVeyor: run bench after build
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.

8 years agoAdd AppVeyor integration
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.

8 years agoSimplify futility pruning return value
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

8 years agoOptimisation of Position::see and Position::see_sign
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.

8 years agoDo not use SEE in evasion scoring
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

8 years agoRetire implicit malus for stonewalls
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

8 years agoAllow inCheck pruning
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

8 years agoRemove useless razoring condition
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.

8 years agoMake razor_margin[4] ONE_PLY value independent
HiraokaTakuya [Wed, 28 Sep 2016 22:11:03 +0000 (07:11 +0900)]
Make razor_margin[4] ONE_PLY value independent

No functional change.