stockfish
7 years agoAdd perft 'divide' command
Marco Costalba [Sat, 24 May 2014 02:31:36 +0000 (04:31 +0200)]
Add perft 'divide' command

To show perft numbers for each move. Just
use 'divide' instead of 'perft', for instance:

position startpos moves e2e4 e7e5
divide 4

Inspired by Ronald de Man.

No functional change.

7 years agoUpdate polyglot.ini after last patch
Marco Costalba [Mon, 19 May 2014 19:19:47 +0000 (21:19 +0200)]
Update polyglot.ini after last patch

No functional change.

7 years agoSymmetric king safety
Lucas Braesch [Mon, 19 May 2014 12:22:15 +0000 (14:22 +0200)]
Symmetric king safety

Retire current asymmetric king evaluation
and use a much simpler symmetric one.

As a side effect retire the infamous
'Aggressiveness' and 'Cowardice' UCI
options.

Tested in no-regression mode,

Passed both STC
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 33855 W: 5863 L: 5764 D: 22228

And LTC
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 40571 W: 5852 L: 5760 D: 28959

bench: 8321835

7 years agoFix an off-by-one bug in extract_pv_from_tt
Marco Costalba [Sat, 17 May 2014 20:56:35 +0000 (22:56 +0200)]
Fix an off-by-one bug in extract_pv_from_tt

At root we start counting plies from 1,
instead pv[] array starts from 0. So
the variable 'ply' we use in extract_pv_from_tt
to index pv[] is misnamed, indeed it is
not the real ply, but ply-1.

The fix is to leave ply name in extract_pv_from_tt
but assign it the correct start value and
consequentely change all the references to pv[].
Instead in insert_pv_in_tt it's simpler to rename
the misnamed 'ply' in 'idx'.

The off-by-one bug was unhidden when trying to use
'ply' for what it should have been, for instance in
this position:

position fen 8/6R1/8/3k4/8/8/8/2K5 w - - 0 1

at depth 24 mate line is erroneusly truncated due
to value_from_tt() using the wrong ply.

Spotted by Ronald de Man.

bench: 8732553

7 years agoExtract a reliable PV line
Marco Costalba [Sat, 17 May 2014 10:49:52 +0000 (12:49 +0200)]
Extract a reliable PV line

Truncate the extracted PV from the point where
the score stored in hash starts to deviate from
the root score.

Idea from Ronald de Man.

bench: 8732553

7 years agoDrop to qsearch at low depth in razoring
Michel Van den Bergh [Tue, 13 May 2014 20:33:41 +0000 (22:33 +0200)]
Drop to qsearch at low depth in razoring

If razoring conditions are satisfied and
depth is low, then directly drop in qsearch.

Passed both STC
LLR: 2.98 (-2.94,2.94) [-1.50,4.50]
Total: 12914 W: 2345 L: 2208 D: 8361

And LTC
LLR: 2.95 (-2.94,2.94) [0.00,6.00]
Total: 50600 W: 7548 L: 7230 D: 35822

bench: 8739659

7 years agoRemove undefended minors
Arjun Temurnikar [Tue, 13 May 2014 19:35:10 +0000 (21:35 +0200)]
Remove undefended minors

Tested in "no regression" mode.

Passed both STC
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 68026 W: 12277 L: 12236 D: 43513

And LTC
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 85682 W: 12861 L: 12836 D: 59985

bench: 7311935

7 years agoSave stalemates in TT
Marco Costalba [Sun, 11 May 2014 08:56:25 +0000 (10:56 +0200)]
Save stalemates in TT

When there aren't legal moves after
a search, instead of returning imediately,
save bestValue in TT as in the usual case.

There is really no reason to special case
this one.

With this patch is fully fixed (again) follwing
position:

    7k/6p1/6B1/5K1P/8/8/8/8 w - - 0 1

Also in SMP case.

bench: 8802105

7 years agoRetire "Idle Threads Sleep" UCI option
Marco Costalba [Sun, 11 May 2014 08:13:56 +0000 (10:13 +0200)]
Retire "Idle Threads Sleep" UCI option

After last Joona's patch there is no measurable
difference between the option set or unset.

Tested by Andreas Strangmüller with 16 threads
on his Dual Opteron 6376.

After 5000 games at 15+0.05 the result is:

1 Stockfish_14050822_T16_on   : 3003  5000 (+849,=3396,-755), 50.9 %
2 Stockfish_14050822_T16_off  : 2997  5000 (+755,=3396,-849), 49.1 %

bench: 880215

7 years agoMake imbalance table more clear
Arjun Temurnikar [Sat, 10 May 2014 06:18:09 +0000 (23:18 -0700)]
Make imbalance table more clear

No functional change.

7 years agoPass Position as const ref in update_stats()
Reuven Peleg [Thu, 8 May 2014 20:18:19 +0000 (23:18 +0300)]
Pass Position as const ref in update_stats()

No functional change.

7 years agoClarify some comments in SMP code
Marco Costalba [Thu, 8 May 2014 07:09:35 +0000 (09:09 +0200)]
Clarify some comments in SMP code

Spotted by Joona.

No functional change.

7 years agoReformat and simplify previous patch
Marco Costalba [Wed, 7 May 2014 06:47:18 +0000 (08:47 +0200)]
Reformat and simplify previous patch

No functional change.

7 years agoAllow a slave to 'late join' another splitpoint
Joona Kiiski [Sat, 3 May 2014 17:29:31 +0000 (18:29 +0100)]
Allow a slave to 'late join' another splitpoint

Instead of waiting to be allocated, actively search
for another split point to join when finishes its
search. Also modify split conditions.

This patch has been tested with 7 threads SMP and
passed both STC:

LLR: 2.97 (-2.94,2.94) [-1.50,4.50]
Total: 2885 W: 519 L: 410 D: 1956

And a reduced-LTC at  25+0.05
LLR: 2.95 (-2.94,2.94) [0.00,6.00]
Total: 4401 W: 684 L: 566 D: 3151

Was then retested against regression in 3 thread case
at standard LTC of  60+0.05:

LLR: 2.96 (-2.94,2.94) [-4.00,0.00]
Total: 40809 W: 5446 L: 5406 D: 29957

bench: 8802105

7 years agoRewrite Score extractors
Ron Britvich [Mon, 5 May 2014 06:52:14 +0000 (08:52 +0200)]
Rewrite Score extractors

Less tricky and even a bit faster. With this
version Visual Studio Ultimate 2013 Update 2 RC
runs fine even in O2 optimization.

No functional change.

7 years agoChange search() signature
Marco Costalba [Sun, 4 May 2014 11:11:32 +0000 (13:11 +0200)]
Change search() signature

Pass SpNode as template parameter.

No functional change.

7 years agoRevert dynamic contempt
Marco Costalba [Sun, 4 May 2014 07:58:49 +0000 (09:58 +0200)]
Revert dynamic contempt

On a final fixed game number test it failed
to prove better than standard version.

STC 15+0.05

ELO: -0.86 +-1.7 (95%) LOS: 15.8%
Total: 57578 W: 10070 L: 10213 D: 37295

bench: 8802105

7 years agoRevert stalemate detection in evaluation
Marco Costalba [Sun, 4 May 2014 07:42:05 +0000 (09:42 +0200)]
Revert stalemate detection in evaluation

Unfortunatly we have a slow down that causes
a regression in STC with no-regression mode:

LLR: -2.96 (-2.94,2.94) [-3.00,1.00]
Total: 22454 W: 3836 L: 4029 D: 14589

bench: 8678654

7 years agoRevert back KBPsK to latest Gary's version
Marco Costalba [Sun, 4 May 2014 07:31:25 +0000 (09:31 +0200)]
Revert back KBPsK to latest Gary's version

The bug was found to be elsewhere. This version
is correct and also is able to detect as draw
positions like:

8/8/5b2/8/8/4k1p1/6P1/5K2 b - - 6 133

bench: 8678654

7 years agoFix KXK endgame
Ronald de Man [Sat, 3 May 2014 19:37:24 +0000 (21:37 +0200)]
Fix KXK endgame

Position is win also if strong side has a bishop
and a knight (plus other material, otherwise
KBNK would be triggered instead of KXK).

This fixes a subtle bug where a search on position

k7/8/8/8/8/P7/PB6/K7 b - - 6 1

Instead of returning a draw score, suddendly returns
a big score. This happens because at one point in
search we reach this position:

8/Pk6/8/8/8/4B3/P7/K7 w - - 3 8

Where white can promote. In case of rook promotion (and also in case of
queen promotion) the resutling position gets a huge static eval that is
above VALUE_KNOWN_WIN (from the point of view of white). So for rook
promotion it is

          &&  futilityBase > -VALUE_KNOWN_WIN

that prevents futility pruning in qsearch. (Removing this condition indeed
lets the problem occur). Raising the static eval for K+B+N+X v K to a value
higher than VALUE_KNOWN_WIN fixes this particular problem without having to
introduce an extra futility pruning condition in qsearch.

I just checked and it seems K+R v K, K+2B v K and even K+B+N v K already get
a huge static eval. Why not K+B+N+P v K?

I think this fix corrects an oversight. There is special code for KBNK, but
KBNXK is handled by KXK, so the test for sufficient material should also test
for B+N.

bench: 8678654

7 years agoFully correct stealmate detection
Marco Costalba [Sat, 3 May 2014 10:09:56 +0000 (12:09 +0200)]
Fully correct stealmate detection

In the (rare) cases when the two conditions
are true, then fully check again with a slow
but correct MoveList<LEGAL>(pos).size().

This is able to detect false positives like
this one:

8/8/8/Q7/5k1p/5P2/4KP2/8 b - - 0 17

When we have a possible simple pawn push that
is not stored in attacks[] array. Because the
third condition triggers very rarely, even if
it is slow, it does not alters in a measurable
way the average speed of the engine.

bench: 8678654

7 years agoAdd stealmate detection to evaluation
Marco Costalba [Sat, 3 May 2014 09:45:58 +0000 (11:45 +0200)]
Add stealmate detection to evaluation

Currently a stealmate position is misevaluated
in a negative/positive score, this leads qsearch(),
that does not detects stealmates too, to return the
wrong score and this yields to some kind of endgames
to be completely misevaluated.

With this patch is fully fixed follwing position

7k/6p1/6B1/5K1P/8/8/8/8 w - - 0 1

Also in SMP case.

Correct root cause analysys by Ronald de Man.

bench: 8678654

7 years agoRevert to Galurung's KBPsK endgame
Marco Costalba [Fri, 2 May 2014 08:27:13 +0000 (10:27 +0200)]
Revert to Galurung's KBPsK endgame

After reverting to the original Tord's
endgame, a search on position

7k/6p1/6B1/5K1P/8/8/8/8 w - - 0 1

Reports, correctly, a draw score instead of
an advantage for white.

Issue reported by Uri Blass.

bench: 8678654

7 years agoUse only standard conforming eg_value()
Marco Costalba [Thu, 1 May 2014 21:08:07 +0000 (23:08 +0200)]
Use only standard conforming eg_value()

Remove the optimization for Intel, is not
standard and can break at any time, moreover
our release build is not done with Intel C++
anymore so we don't need to sqeeze the extra
speed out from this compiler.

No functional change.

7 years agoDon't save stale value in TT after split
Marco Costalba [Thu, 1 May 2014 14:25:17 +0000 (16:25 +0200)]
Don't save stale value in TT after split

If we return from split with a stale value
due to a stop or a cutoff upstream occurred,
then we exit moves loop and save a stale value
in TT before returning search().

This patch, from Joona, fixes this.

bench: 8678654

7 years agoBetter document search stop condition
Marco Costalba [Thu, 1 May 2014 06:28:49 +0000 (08:28 +0200)]
Better document search stop condition

Handling a stop or a cutoff in the search is
a tricky business, so better document this
difficult part of the code.

No functional change.

7 years agoRemove dead code in search
Marco Costalba [Thu, 1 May 2014 05:44:32 +0000 (07:44 +0200)]
Remove dead code in search

We can never have bestValue == -VALUE_INFINITE at
the end of move loop because if no legal move exists
we detect it with previous condition on !moveCount,
if a legal move exists we never prune it due to
futility pruning condition:

bestValue > VALUE_MATED_IN_MAX_PLY

So this code never executes, as I have also verified
directly.

Issue reported by Joona.

No functional change.

7 years agoFix a compile error with Intel C++
Marco Costalba [Wed, 30 Apr 2014 06:55:45 +0000 (08:55 +0200)]
Fix a compile error with Intel C++

Intel compiler is very picky:
"error: this operation on an enumerated type requires an
applicable user-defined operator function"

Reported by Tony Gaor.

No functional change.

7 years agoPenalize hanging pieces
snicolet [Sat, 26 Apr 2014 23:35:46 +0000 (01:35 +0200)]
Penalize hanging pieces

Passed both STC
LLR: 2.95 (-2.94,2.94) [-1.50,4.50]
Total: 8519 W: 1565 L: 1440 D: 5514

And LTC
LLR: 2.95 (-2.94,2.94) [0.00,6.00]
Total: 60618 W: 9141 L: 8777 D: 42700

bench: 8678654

7 years agoRearrange interpolation formula
Marco Costalba [Mon, 28 Apr 2014 15:15:16 +0000 (17:15 +0200)]
Rearrange interpolation formula

Put the division at the end to reduce
rounding errors. This alters the bench
due to different rounding errors, but
should not alter ELO in any way.

bench: 7615217

7 years agoMinor stuff scattered around
mstembera [Mon, 28 Apr 2014 08:30:06 +0000 (01:30 -0700)]
Minor stuff scattered around

Just random minor stuff I found while browsing the code.

No functional change.

7 years agoRemove other useless floor()
Marco Costalba [Sun, 27 Apr 2014 17:17:40 +0000 (19:17 +0200)]
Remove other useless floor()

No functional change.

7 years agoDon't need floor() in timeman.cpp
Marco Costalba [Sun, 27 Apr 2014 17:10:00 +0000 (19:10 +0200)]
Don't need floor() in timeman.cpp

For positive numbers result is equivalent:
http://stackoverflow.com/questions/3300290/cast-to-int-vs-floor

Spotted by Joseph Ellis.

No functional change.

7 years agoFix Intel compiler warnings
Marco Costalba [Sun, 27 Apr 2014 10:02:36 +0000 (12:02 +0200)]
Fix Intel compiler warnings

Fallout from previous patch: Intel compiler
is very noisy.

No functional change.

7 years agoRemove some useless casts
Marco Costalba [Sun, 27 Apr 2014 09:40:44 +0000 (11:40 +0200)]
Remove some useless casts

No functional change.

7 years agoWe can add an integer to a Value
Marco Costalba [Sun, 27 Apr 2014 08:13:59 +0000 (10:13 +0200)]
We can add an integer to a Value

We have defined corresponding operators,
so rely on them to streamline the code
and increase readibility.

No functional change.

7 years agoRemove rook passers eval completely
Arjun Temurnikar [Sun, 20 Apr 2014 23:44:18 +0000 (16:44 -0700)]
Remove rook passers eval completely

Tested in no-regression mode.

Passed STC
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 17727 W: 3248 L: 3122 D: 11357

And (a very long!) LTC
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 106327 W: 16258 L: 16265 D: 73804

bench: 7396783

7 years agoReformatting in material.h
Marco Costalba [Sun, 27 Apr 2014 07:31:22 +0000 (09:31 +0200)]
Reformatting in material.h

No functional change.

7 years agoMove game phase constants to enum Value
Marco Costalba [Sun, 27 Apr 2014 07:23:45 +0000 (09:23 +0200)]
Move game phase constants to enum Value

No functional change.

7 years agoSpeed up by almost 3%
Marco Costalba [Sat, 26 Apr 2014 22:25:18 +0000 (00:25 +0200)]
Speed up by almost 3%

This apparentely silly tweak allows
to speed up the bench by almost 3%.

Not clear why, repeating with perft,
the speed up vanishes.

Suggested by Jonathan Calovski.

No functional change.

7 years agoFix issues detected by Coverity Scan
Marco Costalba [Sat, 26 Apr 2014 07:20:37 +0000 (09:20 +0200)]
Fix issues detected by Coverity Scan

Most of Coverity Scan reports are false
positives, but in rare cases we have
confirmed (very small) issues.

No functional change.

7 years agoSpeed up picking of killers
Marco Costalba [Fri, 25 Apr 2014 10:53:51 +0000 (12:53 +0200)]
Speed up picking of killers

Changing the order of the conditions gives
about 1% speed up!

No functional change.

7 years agoRemove RookOn7th and merge values into psqt
Arjun Temurnikar [Sun, 20 Apr 2014 10:50:03 +0000 (03:50 -0700)]
Remove RookOn7th and merge values into psqt

Tested in no-regression mode:

STC
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 55678 W: 9954 L: 9892 D: 35832

LTC
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 9238 W: 1448 L: 1311 D: 6479

bench: 7905850

7 years agoRemove penalty for knight when few enemy pawns
Arjun Temurnikar [Sat, 19 Apr 2014 01:54:23 +0000 (18:54 -0700)]
Remove penalty for knight when few enemy pawns

Tested in standard mode at STC and no-regression
mode at LTC:

STC
LLR: 2.97 (-2.94,2.94) [-1.50,4.50]
Total: 19503 W: 3502 L: 3349 D: 12652

LTC
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 67474 W: 9974 L: 9921 D: 47579

bench: 8331217

7 years agoShuffle movepicker score
Jonathan Calovski [Wed, 23 Apr 2014 03:14:46 +0000 (13:14 +1000)]
Shuffle movepicker score

Believed to be a speed optimization as benched
on Windows with bench realtime affinity 0x1 deleting
highest and lowest runs:

Base Test
1549259 1608202
1538115 1583934
1543168 1556938
1536365 1554179
1533026 1582010

Signature remains unchanged and gives anywhere from 1-2% nps
boost in analysis depending on number of cores used.

No functional change.

7 years agoCorrectly apply previous patch
Marco Costalba [Thu, 24 Apr 2014 06:35:13 +0000 (08:35 +0200)]
Correctly apply previous patch

Apply the correct values from previous patch.

bench: 8082049

7 years agoMove queen vs. 3 minors rule to imbalance tables
joergoster [Sat, 19 Apr 2014 14:41:56 +0000 (16:41 +0200)]
Move queen vs. 3 minors rule to imbalance tables

Tuned with CLOP after 57k games.

Simplification: tested in no-regression mode.

Passed both STC
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 17254 W: 3159 L: 3032 D: 11063

And LTC
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 32413 W: 4967 L: 4864 D: 22582

bench: 8082049

7 years agoRevert "Generalize shift_bb() to handle double pushes"
Marco Costalba [Mon, 21 Apr 2014 18:54:55 +0000 (20:54 +0200)]
Revert "Generalize shift_bb() to handle double pushes"

Seems to intorduce some compiler warning as
reported by Gary. Warning seems bogus, but
revert anyhow.

No functional change.

7 years agoReset DrawValue[] before new search
Marco Costalba [Mon, 21 Apr 2014 12:30:27 +0000 (14:30 +0200)]
Reset DrawValue[] before new search

Spotted by Ronald de Man

bench: 7384368

7 years agoRise contempt when in advantage
Leonid Pechenik [Thu, 17 Apr 2014 16:49:57 +0000 (12:49 -0400)]
Rise contempt when in advantage

This is a very discussed patch with many
argumentations pro and against. The fact is
it passed both STC:

LLR: 2.96 (-2.94,2.94) [-1.50,4.50]
Total: 16305 W: 3001 L: 2855 D: 10449

And LTC
LLR: 2.95 (-2.94,2.94) [0.00,6.00]
Total: 34273 W: 5180 L: 4931 D: 24162

Although it is true that a correct test should
include foreign engines, we commit it anyhow so
people can test it out in the wild, under broader
conditions.

bench: 7384368

7 years agoStreamline implementation of Position::pretty()
Marco Costalba [Mon, 21 Apr 2014 09:42:08 +0000 (11:42 +0200)]
Streamline implementation of Position::pretty()

Simpler and more in line with Bitboards::pretty()

No functional change.

7 years agoRaise penalty blocked enemy pawn on 6th rank
Stefan Geschwentner [Sat, 5 Apr 2014 10:27:57 +0000 (12:27 +0200)]
Raise penalty blocked enemy pawn on 6th rank

Idea from Lyudmil Tsvetkov.

The value seems to be raised a bit abruptly, but as
Gary said, a blocked pawn on the sixth rank has been
instrumental in limiting king mobility in multiple
losses that I've seen from SF. A blocked pawn on fifth
rank is much less serious on the king safety impact.

Passed both STC
LLR: 2.97 (-2.94,2.94) [-1.50,4.50]
Total: 14551 W: 2750 L: 2607 D: 9194

and LTC
LLR: 2.96 (-2.94,2.94) [0.00,6.00]
Total: 43595 W: 6917 L: 6618 D: 30060

And even a retest at 60" fixed games 40K
ELO: 1.79 +-1.9 (95%) LOS: 97.0%
Total: 39889 W: 6018 L: 5813 D: 28058

bench: 7154916

7 years agoGeneralize shift_bb() to handle double pushes
Marco Costalba [Sun, 20 Apr 2014 13:15:43 +0000 (15:15 +0200)]
Generalize shift_bb() to handle double pushes

And use it in evaluate_space.

No functional change.

7 years agoSmall simplification to passed pawns
Arjun Temurnikar [Fri, 18 Apr 2014 04:41:22 +0000 (21:41 -0700)]
Small simplification to passed pawns

Tested in no-regression mode.

Passed both STC
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 28521 W: 5066 L: 4958 D: 18497

And LTC
LLR: 3.04 (-2.94,2.94) [-3.00,1.00]
Total: 21939 W: 3261 L: 3138 D: 15540

bench: 8165681

7 years agoRemove supporting pawns
Joseph Hellis [Thu, 17 Apr 2014 06:43:40 +0000 (08:43 +0200)]
Remove supporting pawns

Tested in no-regression mode

Passed both STC
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 44957 W: 7984 L: 7903 D: 29070

and LTC
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 12396 W: 1916 L: 1783 D: 8697

Bench: 7907885

7 years agoEnable BMI1 too when using BMI2 ARCH
Jean-Francois Romang [Mon, 14 Apr 2014 05:10:39 +0000 (07:10 +0200)]
Enable BMI1 too when using BMI2 ARCH

Adding BMI1 allows the compiler to use _blsr_u64
automatically (the advertised 0.3% speed gain).
I verified that the compiler does not use this
instruction with the -mbmi2 flag only. Also, all
processors supporting BMI2 is also supporting BMI1.

No functional change

7 years agoMore readable trapped rook condition
Marco Costalba [Sun, 13 Apr 2014 11:35:58 +0000 (13:35 +0200)]
More readable trapped rook condition

Prefer

file_of(s) < file_of(ksq)

to the inidrect

file_of(ksq) < FILE_E

To evaluate if semiopen side to check is the left side.

Also other small touches while there.

No functional change.

7 years agoSimplify Makefile by removing OS X targets
Daylen Yang [Sat, 12 Apr 2014 23:26:45 +0000 (16:26 -0700)]
Simplify Makefile by removing OS X targets

Right now the Makefile is cluttered with OS X equivalents
of all the x86 targets. We can get rid of all of them and
just check UNAME against "Darwin" for the few OS X-specific
things we need to do.

We also disable Clang LTO when using BMI2 instructions. For
some reason, LLVM cannot find the PEXT instruction when using
LTO. I don't know why, but disabling LTO for BMI2 fixes it.

No functional change.

7 years agoMove args parsing to UCI::loop
Marco Costalba [Sat, 12 Apr 2014 10:52:10 +0000 (12:52 +0200)]
Move args parsing to UCI::loop

This leaves a very clean main.cpp

No functional change.

7 years agoReshuffle in uci.cpp
Marco Costalba [Sat, 12 Apr 2014 10:05:25 +0000 (12:05 +0200)]
Reshuffle in uci.cpp

Move function definitions before call site.

No functional change.

7 years agoReshuffle in timeman.cpp
Marco Costalba [Sat, 12 Apr 2014 10:00:37 +0000 (12:00 +0200)]
Reshuffle in timeman.cpp

Move template definitions before call site.

No functional change.

7 years agoFix a typo in evaluate
Marco Costalba [Sat, 12 Apr 2014 08:17:41 +0000 (10:17 +0200)]
Fix a typo in evaluate

Spotted by Lyudmil Antonov.

No functional change.

7 years agoRetire signature-build
Marco Costalba [Sat, 12 Apr 2014 07:18:55 +0000 (09:18 +0200)]
Retire signature-build

Does not seem used.

No functional change.

7 years agoAdd ARCH x86-64-bmi2 support
Jean-Francois Romang [Thu, 10 Apr 2014 18:07:40 +0000 (20:07 +0200)]
Add ARCH x86-64-bmi2 support

Intel Haswell and newer CPUs can calculate sliders
attacks using special PEXT asm instructions instead
of magic bitboards. This gives a +3% speed up.

To enable it just compile with ARCH=x86-64-bmi2

No functional change.

7 years agoSwitch to hardware PEXT
Marco Costalba [Mon, 7 Apr 2014 19:04:34 +0000 (21:04 +0200)]
Switch to hardware PEXT

Retire software pext and introduce hardware
call when USE_PEXT is defined during compilation.

This is a full complete implementation of sliding
attacks using PEXT.

No functional change.

7 years agoImplement PEXT based attacks
Marco Costalba [Mon, 7 Apr 2014 14:27:14 +0000 (16:27 +0200)]
Implement PEXT based attacks

According to:

https://chessprogramming.wikispaces.com/BMI2#PEXTBitboards

No functional change.

7 years agoAdd PEXT software implementation
Marco Costalba [Mon, 7 Apr 2014 14:02:24 +0000 (16:02 +0200)]
Add PEXT software implementation

For development/debug purposes.

No functional change.

7 years agoBig reshuffle in evaluate.cpp
Marco Costalba [Sat, 12 Apr 2014 06:32:52 +0000 (08:32 +0200)]
Big reshuffle in evaluate.cpp

Reshuffle functions to define them in reverse
calling order (C style).

This allow us to define templates before they are
used. Currently it is not like this, for instance
evaluate_pieces is defined after do_evaluate that
calls it. This happens to work for some strange
reason (two phase lookup?) but we want to avoid
code that works 'by magic'.

As a nice side-effect we can now remove the function
prototypes.

No functional change.

7 years agoMove LowMobPenalty into psq/mobility tables
Gary Linscott [Fri, 11 Apr 2014 16:14:57 +0000 (12:14 -0400)]
Move LowMobPenalty into psq/mobility tables

Tested in no-regression mode.

Passed both STC
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 36705 W: 6537 L: 6443 D: 23725

and LTC
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 9358 W: 1495 L: 1358 D: 6505

bench: 6921356

7 years agoReduce penalty for doubled pawns further away from each other
Gary Linscott [Fri, 11 Apr 2014 15:04:48 +0000 (11:04 -0400)]
Reduce penalty for doubled pawns further away from each other

Passed both STC
LLR: 2.96 (-2.94,2.94) [-1.50,4.50]
Total: 38339 W: 6849 L: 6649 D: 24841

and LTC
LLR: 2.95 (-2.94,2.94) [0.00,6.00]
Total: 22693 W: 3455 L: 3256 D: 15982

bench: 7508468

7 years agoFurther simplification in evaluate
Marco Costalba [Fri, 11 Apr 2014 06:38:09 +0000 (08:38 +0200)]
Further simplification in evaluate

No functional change

7 years agoGet rid of an evaluate_pieces() overload
Marco Costalba [Thu, 10 Apr 2014 17:45:18 +0000 (19:45 +0200)]
Get rid of an evaluate_pieces() overload

Rewrite and greatly simplify that part of code.

No functional change.

7 years agoAdd a penalty for low mobility pieces
Gary Linscott [Thu, 10 Apr 2014 06:34:14 +0000 (08:34 +0200)]
Add a penalty for low mobility pieces

Passed both STC
LLR: 2.96 (-2.94,2.94) [-1.50,4.50]
Total: 81857 W: 14652 L: 14342 D: 52863

and LTC
LLR: 2.97 (-2.94,2.94) [0.00,6.00]
Total: 45400 W: 6999 L: 6697 D: 31704

bench: 7716978

7 years agoRestrict queen mobility to safe squares
Gary Linscott [Tue, 8 Apr 2014 19:50:01 +0000 (21:50 +0200)]
Restrict queen mobility to safe squares

Passed both STC
LLR: 2.95 (-2.94,2.94) [-1.50,4.50]
Total: 16188 W: 3119 L: 2971 D: 10098

and LTC
LLR: 2.95 (-2.94,2.94) [0.00,6.00]
Total: 6336 W: 1010 L: 882 D: 4444

bench: 7533692

7 years agoRescale UCI scores to PawnValueEg
Lucas Braesch [Sun, 6 Apr 2014 09:43:30 +0000 (11:43 +0200)]
Rescale UCI scores to PawnValueEg

This is more consistent with what other engines are doing.
Often people thinks that SF's scores are overblown. In the
end, it just boils down to the arbitrary way of rescaling them.

No functional change.

7 years agoSync some common names
Marco Costalba [Sun, 6 Apr 2014 08:50:27 +0000 (10:50 +0200)]
Sync some common names

No functional change.

7 years agoSome more work in pretty_pv
Marco Costalba [Sat, 5 Apr 2014 23:11:30 +0000 (01:11 +0200)]
Some more work in pretty_pv

No functional change.

7 years agoSmall tidy up in move_to_san
Marco Costalba [Sat, 5 Apr 2014 16:54:37 +0000 (18:54 +0200)]
Small tidy up in move_to_san

No functional change.

7 years agoSmaller and faster profile-build binaries
mstembera [Sat, 5 Apr 2014 10:46:17 +0000 (12:46 +0200)]
Smaller and faster profile-build binaries

I have noticed that increasing the bench depth produces
progressively smaller and slightly faster executables at
the cost of longer compile times.  Also using bench "time"
instead of "depth" seems to produce slightly smaller/faster
executables  given comparable compile times.

I have made a new Makefile that generates smaller and
about 1% to 2% faster profile executables at only a
little extra compile time.  On  my mobile 2GHz i7 a
full profile build time goes from 3'48" to 4'13" and
the exe goes down by 5% from 416,310 bytes to 395,567
bytes.

No functional change.

7 years agoRemove QueenOn7th and QueenOnPawn
Lucas Braesch [Thu, 3 Apr 2014 13:31:42 +0000 (21:31 +0800)]
Remove QueenOn7th and QueenOnPawn

Small simplification.

Passed SPRT(-3,1) both at STC:
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 17051 W: 3132 L: 3005 D: 10914

and LTC:
LLR: 4.55 (-2.94,2.94) [-3.00,1.00]
Total: 24890 W: 3842 L: 3646 D: 17402

The rationale behind this is that I've never managed to add a
Queen on 7th rank bonus in DiscoCheck, because it never showed
to be positive (evne slightly) in testing. The only thing that
worked is Rook on 7th rank.

In terms of SF code, it seemed natural to group it with QueenOnPawn
as well as those are done together. I know you're against groupping
in general, but when it comes to non regression test, you are being
more conservative by groupping. If the group passes SPRT(-3,1) it's
safer to commit, than test every component in SPRT(-3,1) and end up
with the risk of commiting several -1 elo regression instead of just
one -1 elo regression.

In chess terms, perhaps it's just easier to manouver a Queen (which
can more also diagonaly) than a Rook. Therefore you can let the search
do its job without needing eval ad-hoc terms to guide it. For the Rook
which takes more moves to manouver such eval terms can be (marginally)
useful.

bench: 7473314

7 years agoSpeed up apply_weight
mstembera [Fri, 4 Apr 2014 03:08:54 +0000 (20:08 -0700)]
Speed up apply_weight

Speed up by about 2% this hot path function pre-calculating
midgame and endgame values of the weight.

No functional change.

7 years agoUpdate Readme to 128 max threads
Marco Costalba [Thu, 3 Apr 2014 09:33:42 +0000 (11:33 +0200)]
Update Readme to 128 max threads

No functional change.

7 years agoQueen vs. 3 pieces imbalance
Joerg Oster [Thu, 3 Apr 2014 08:38:11 +0000 (10:38 +0200)]
Queen vs. 3 pieces imbalance

Passed both STC
LLR: 7.32 (-2.94,2.94) [-1.50,4.50]
Total: 98108 W: 18087 L: 17576 D: 62445

And LTC
LLR: 2.95 (-2.94,2.94) [0.00,6.00]
Total: 15082 W: 2417 L: 2248 D: 10417

bench: 7717336

7 years agoMake operator<< to return void
Marco Costalba [Thu, 3 Apr 2014 08:34:25 +0000 (10:34 +0200)]
Make operator<< to return void

This should help preventing misuse.

No functional change.

7 years agoDrop not defended by pawn condition
Stefan Geschwentner [Tue, 1 Apr 2014 09:58:10 +0000 (11:58 +0200)]
Drop not defended by pawn condition

Passed no-regression test both at STC
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 96554 W: 17563 L: 17572 D: 61419

and at LTC
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 31891 W: 4905 L: 4801 D: 22185

bench: 7720896

7 years agoDo not workaround function argument evaluation
Marco Costalba [Tue, 1 Apr 2014 07:39:41 +0000 (09:39 +0200)]
Do not workaround function argument evaluation

Rewrite options initialization to do not trying to
hack upon the undefined evaluation order of function
arguments.

No functional change.

7 years agoFix a compile error with Intel C++
Marco Costalba [Sun, 30 Mar 2014 12:20:12 +0000 (14:20 +0200)]
Fix a compile error with Intel C++

Error: a value of type "int" cannot be assigned
to an entity of type "Value"

No functional change.

7 years agoFix a warning with MSVC 2010
Marco Costalba [Sun, 30 Mar 2014 12:25:57 +0000 (14:25 +0200)]
Fix a warning with MSVC 2010

Warning C4804: '<' : unsafe use of type 'bool' in operation

No functional change.

7 years agoShow evaluation from white POV in trace
Marco Costalba [Sun, 30 Mar 2014 08:11:32 +0000 (10:11 +0200)]
Show evaluation from white POV in trace

We chose this instead of negamax sign convention
(ie. from the point of view of the side to move)
because it is more in line to how the eval
table is presented.

Also some tweak to formatting while there.

No functional change.

7 years agoRaise VALUE_INFINITE
Marco Costalba [Sat, 29 Mar 2014 10:12:37 +0000 (11:12 +0100)]
Raise VALUE_INFINITE

In some legal positions like this one:
R6R/3Q4/1Q4Q1/4Q3/2Q4Q/Q4Q2/Np1Q4/kB1N1KB1  b -- 0 1

We can have a very high score, in this case 30177 and 29267
for midgame and endgame respectively, and because
VALUE_INFINITE = 30001 we have an assert in interpolate()

Midgame and endgame scores are stored in 16 bit signed integers
so we can rise VALUE_INFINITE a little bit. This does not fix
the possibility of overflow in general case, just makes the
condition more difficult to trigger and anyhow better uses all
the score width.

Raising VALUE_INFINITE to 32000 seems to fix the problem for this
particular case.

No functional change.

7 years agoFurther simplification of TT replace strategy
Jean-Francois Romang [Thu, 27 Mar 2014 17:38:19 +0000 (18:38 +0100)]
Further simplification of TT replace strategy

No functional change

7 years agoRestore old aspiration window to 16
Marco Costalba [Wed, 26 Mar 2014 05:39:46 +0000 (06:39 +0100)]
Restore old aspiration window to 16

Tested directly at LTC because previous long
test series on this topic shows it is TC dependant.

Tested with no-regression mode because gets rid of
an ugly and ad-hoc rule.

Test at LTC:
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 67918 W: 10590 L: 10541 D: 46787

bench: 7926803

7 years agoPinned pieces affect king safety
Stefan Geschwentner [Fri, 28 Mar 2014 07:41:50 +0000 (08:41 +0100)]
Pinned pieces affect king safety

Here the new idea is to link pinned pieces
with king safety.

Passed both STC
LLR: 2.96 (-2.94,2.94) [-1.50,4.50]
Total: 10047 W: 1867 L: 1737 D: 6443

And LTC
LLR: 2.97 (-2.94,2.94) [0.00,6.00]
Total: 10419 W: 1692 L: 1543 D: 7184

bench: 8325087

7 years agoFix a bug in pawns eval tracing
Marco Costalba [Wed, 26 Mar 2014 06:06:29 +0000 (07:06 +0100)]
Fix a bug in pawns eval tracing

Instead of totals we were showing white and
black values.

Spotted by Sven Schüle

No functional change.

7 years agoSimplify TT replace strategy
Marco Costalba [Sun, 23 Mar 2014 09:03:11 +0000 (10:03 +0100)]
Simplify TT replace strategy

Tested for no-regression with SPRT[-3, 1] at STC
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 32046 W: 6020 L: 5918 D: 20108

No functional change.

7 years agoIntroduce penalty for weak (=unsupported) pawns.
snicolet [Sun, 23 Mar 2014 22:51:25 +0000 (23:51 +0100)]
Introduce penalty for weak (=unsupported) pawns.

We add a penalty for each pawn which is not protected by another pawn
of the same color.

Passed both short TC
LLR: 2.96 (-2.94,2.94) [-1.50,4.50]
Total: 12107 W: 2411 L: 2272 D: 7424

And long TC
LLR: 2.96 (-2.94,2.94) [0.00,6.00]
Total: 9204 W: 1605 L: 1458 D: 6141

bench: 7682173

7 years agoFix an incorrect 'friend' declaration
Marco Costalba [Sun, 23 Mar 2014 10:17:38 +0000 (11:17 +0100)]
Fix an incorrect 'friend' declaration

Spotted by Lee David.

No functional change.

7 years agoRetire last usage of operator|(File f, Rank r)
Marco Costalba [Sun, 23 Mar 2014 09:42:37 +0000 (10:42 +0100)]
Retire last usage of operator|(File f, Rank r)

This for some reason was missed.

No functional change.

7 years agoRefresh TT entries generation automatically on probe
mstembera [Sun, 23 Mar 2014 08:24:35 +0000 (09:24 +0100)]
Refresh TT entries generation automatically on probe

And other assorted simplifications, tested with SPRT[-3, 1]

Passed both short TC
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 18814 W: 3600 L: 3475 D: 11739

And long TC
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 20731 W: 3217 L: 3096 D: 14418

No functional change.

7 years agoRename score to value in ExtMove
Marco Costalba [Sun, 23 Mar 2014 07:52:42 +0000 (08:52 +0100)]
Rename score to value in ExtMove

We use 'score' for the value mid-endgame pair.

No functional change.