]> git.sesse.net Git - stockfish/log
stockfish
12 years agoIntroduce namespace UCI
Marco Costalba [Sat, 18 Aug 2012 10:50:43 +0000 (11:50 +0100)]
Introduce namespace UCI

Ater previous patch it comes naturally to take this
extra step.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoRetire struct OptionsMap
Marco Costalba [Sat, 18 Aug 2012 10:23:18 +0000 (11:23 +0100)]
Retire struct OptionsMap

Directly use the underlying std::map instead and avoid
a useless inheritance.

As a nice side-effect Options global object has now a
default c'tor avoiding possible issues with globals
initializations.

Suggested by Rein Halbersma.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoExplicitly qualify STL functions
Marco Costalba [Sat, 18 Aug 2012 10:00:56 +0000 (11:00 +0100)]
Explicitly qualify STL functions

Suggested by Rein Halbersma.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoRetire MovePickerExt struct
Marco Costalba [Sat, 18 Aug 2012 09:43:13 +0000 (10:43 +0100)]
Retire MovePickerExt struct

Templetize MovePicker::next_move() member function instead. It
is easier and we also avoid the forwarding of MovePicker() c'tor
arguments in the common case.

Suggested by Rein Halbersma.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoGuard against 'divide by zero' in bench
Marco Costalba [Mon, 30 Jul 2012 07:44:54 +0000 (09:44 +0200)]
Guard against 'divide by zero' in bench

Also remove an useless cast.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoAdded Haiku-specific changes to Makefile
Joseph R. Prostko [Mon, 30 Jul 2012 00:13:27 +0000 (00:13 +0000)]
Added Haiku-specific changes to Makefile

First change: If Haiku is host platform, change
installation prefix to /boot/common/bin

Second change: Only link in pthreads if Haiku isn't
host platform.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoFix UCI promotion move notation
Marco Costalba [Thu, 26 Jul 2012 17:16:24 +0000 (18:16 +0100)]
Fix UCI promotion move notation

Regression introduced by revision
f0db6a6c0b82a586

Spotted by Joona.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoReadme.txt: more grammar/style fixes
Linus Arver [Thu, 19 Jul 2012 19:09:37 +0000 (12:09 -0700)]
Readme.txt: more grammar/style fixes

12 years agoReadme.txt: grammar/stylistic fixes
Linus Arver [Wed, 18 Jul 2012 23:46:51 +0000 (16:46 -0700)]
Readme.txt: grammar/stylistic fixes

12 years agoFix regression in move_to_san()
Marco Costalba [Sun, 15 Jul 2012 08:03:38 +0000 (09:03 +0100)]
Fix regression in move_to_san()

Broken since commit 628808a11382a3ac

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoIntroduce notation.h
Marco Costalba [Sun, 15 Jul 2012 07:14:25 +0000 (08:14 +0100)]
Introduce notation.h

And group there all the formatting functions but
uci_pv() that requires access to search.cpp variables.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoRewrite pv_info_xxx() signatures
Marco Costalba [Sat, 14 Jul 2012 12:19:16 +0000 (13:19 +0100)]
Rewrite pv_info_xxx() signatures

Use the helpers to format the PV info but without
writing to output stream (file or cout). Message
formatting and sending are two logically different
task.

Incidentaly reintroduce the pretty_pv() name,
from Glaurung memories :-)

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoInclude castle moves in 'dangerous' flag
Marco Costalba [Sat, 14 Jul 2012 11:29:11 +0000 (12:29 +0100)]
Include castle moves in 'dangerous' flag

Simplifies the code and seems more natural.

We have a very small fucntional change becuase now
at PV nodes castles are extended one ply anyhow.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoMerge exclusion search conditions
Marco Costalba [Sat, 14 Jul 2012 11:18:14 +0000 (12:18 +0100)]
Merge exclusion search conditions

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoRemove redundant condition in is_dangerous()
Marco Costalba [Fri, 13 Jul 2012 08:54:24 +0000 (10:54 +0200)]
Remove redundant condition in is_dangerous()

A pawn on 7th is always passed so retire
this redundant condition.

No funtional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoSilence a MSVC warning in class Tie
Marco Costalba [Sun, 8 Jul 2012 09:22:42 +0000 (10:22 +0100)]
Silence a MSVC warning in class Tie

With warning level 4 MSVC complains that a default
assignment operator could not be generated due to
member 'file' is a reference (warning C4512).

Use a pointer instead of a reference and move
struct Tie outisde class Logger while there.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoRename first_1 / last_1 in lsb / msb
Marco Costalba [Sun, 8 Jul 2012 07:30:37 +0000 (08:30 +0100)]
Rename first_1 / last_1 in lsb / msb

It seems more accurate: lsb is clear while 'first
bit' depends from where you look at the bitboard.

And fix compile in case of 64 bits platforms that
do not use BSFQ intrinsics.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoUse last_1() to compute new TT size
Marco Costalba [Sat, 7 Jul 2012 18:30:27 +0000 (19:30 +0100)]
Use last_1() to compute new TT size

Transposition table consists of a power of 2
number of TTCluster entries.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoRevert to -O3 with Clang
Marco Costalba [Sat, 7 Jul 2012 18:00:05 +0000 (19:00 +0100)]
Revert to -O3 with Clang

Instead of -O4 option that does not work with both mingw and
Linux gcc (tested with Clang 3.1).

As reported by Reed Kotler:
Turns out that -O4 is not a valid option for clang unless you have
the proper gold linker and plugins built. That's because -O4 enables
LTO, which writes out bitcode files during the compile, and then loads
those and optimizes them during the link phase.

It requires a linker that supports LLVM's LTO. There is a plugin for
Gold available as part of LLVM.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoFix signedness warning in time_to_msec()
Marco Costalba [Sat, 7 Jul 2012 15:28:39 +0000 (16:28 +0100)]
Fix signedness warning in time_to_msec()

We have a signed integer here so let the return type
take in account that.

Found by Clang with -Weverything option.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoMore idiomatic signature for operator=()
Marco Costalba [Thu, 5 Jul 2012 10:52:11 +0000 (11:52 +0100)]
More idiomatic signature for operator=()

Return a reference instead of void so to enable
chained assignments like

"p = q = Position(...);"

Suggested by Rein Halbersma.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoStreamline null search reduction formula
Marco Costalba [Thu, 5 Jul 2012 10:48:17 +0000 (11:48 +0100)]
Streamline null search reduction formula

Although a (little) functional change, we have no ELO change
but formula it is now more clear.

After 13019 games at 30"+0.05
Mod vs Orig 2075 - 2088 - 8856 ELO 0 (+- 3.4)

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoClear transposition table on "ucinewgame"
Marco Costalba [Sat, 30 Jun 2012 07:00:48 +0000 (08:00 +0100)]
Clear transposition table on "ucinewgame"

It seems the standard behaviour as implemented
in most engines although UCI protocol does not
specify what to do upon "ucinewgame" command.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoTempletize make_move() helpers
Marco Costalba [Mon, 25 Jun 2012 06:57:28 +0000 (07:57 +0100)]
Templetize make_move() helpers

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoReduce indentation in UCIOption::operator=()
Marco Costalba [Sun, 24 Jun 2012 23:14:42 +0000 (00:14 +0100)]
Reduce indentation in UCIOption::operator=()

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoMicro-optimize move_to_san()
Marco Costalba [Sun, 24 Jun 2012 11:08:07 +0000 (12:08 +0100)]
Micro-optimize move_to_san()

Calculate the attacks only for the piece to disambiguate,
not for all.

Also some reformatting while there.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoUse type_of() to categorize the moves
Marco Costalba [Sun, 24 Jun 2012 09:08:16 +0000 (10:08 +0100)]
Use type_of() to categorize the moves

Needed to rename old MoveType (used in move generation)
to GenType.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoRename move.cpp to notation.cpp
Marco Costalba [Sun, 24 Jun 2012 08:46:08 +0000 (09:46 +0100)]
Rename move.cpp  to notation.cpp

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoRename ThreadsManager to ThreadPool
Marco Costalba [Sun, 24 Jun 2012 08:30:40 +0000 (09:30 +0100)]
Rename ThreadsManager to ThreadPool

It is a more standard naming convention.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoReplace make_square() with operator|(File, Rank)
Marco Costalba [Sat, 23 Jun 2012 07:49:33 +0000 (08:49 +0100)]
Replace make_square() with operator|(File, Rank)

Be fancy :-)

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoCoding style in move.cpp
Marco Costalba [Sat, 23 Jun 2012 06:51:02 +0000 (07:51 +0100)]
Coding style in move.cpp

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoAdd min pawn-king distance to endgame evaluation
Marco Costalba [Sun, 17 Jun 2012 08:18:18 +0000 (09:18 +0100)]
Add min pawn-king distance to endgame evaluation

At endgame time push the king near his pawns (actually
one of them).

Original idea is from Critter (although slightly different),
implementation is mine and is completely different from the
original, in particular it is different the algorithm to
compute the minimum distance from pawns.

After 19895 games at 15"+0.05
Mod vs Orig 3638 - 3248 - 13009 ELO +7

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoCalculate min distance between king and his pawns
Marco Costalba [Sun, 17 Jun 2012 08:03:05 +0000 (09:03 +0100)]
Calculate min distance between king and his pawns

Just added infrastructure.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoReformat pick_random() in magics calculation
Marco Costalba [Sun, 10 Jun 2012 10:11:28 +0000 (11:11 +0100)]
Reformat pick_random() in magics calculation

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoFix a compile error in opposite_colors()
Marco Costalba [Sat, 2 Jun 2012 07:51:58 +0000 (08:51 +0100)]
Fix a compile error in opposite_colors()

Error is due to ambiguous overloading of operator^
because we have both the built-in operator^(int, int)
and the user defined operator^(Bitboard, Square).

This error does not trigger when using Makefile becuase,
due to luck, the user defined operator^(Bitboard, Square)
happens to be always defined _after_ opposite_colors() so
that compiler does not claim. But in case of Microsoft MSVC
we don't have a Makefile and the order of files compilation
is chosen by the compiler (in an unpredictable way). So it
could still happen that error is not detected (as in my case),
but in another case the order of compilation of the files could
be so that at some point both operator^ were defined before
opposite_colors() and this triggers the error.

The fix is much simpler than the explanation :-)

Reported by Quocvuong82.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoFix an issue when adding a book during the game
Marco Costalba [Sun, 27 May 2012 13:13:14 +0000 (14:13 +0100)]
Fix an issue when adding a book during the game

Currently when we fail to open a book file, for instance
if it doesn't exsist, we leave Book::open() with ifstream
failbit set. If then the book file is added, we correctly
open it at next attempt, but failbit is still set so that
after opening we exit because ifstream::good() returns false.

The fix is to reset failbit upon exiting.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoRetire PieceOffset[] in book.cpp
Marco Costalba [Sun, 27 May 2012 12:43:15 +0000 (13:43 +0100)]
Retire PieceOffset[] in book.cpp

And calculate piece offset on the fly. Also
improve comments.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoFix a possible 'Division by zero'
Marco Costalba [Sat, 26 May 2012 22:14:37 +0000 (23:14 +0100)]
Fix a possible 'Division by zero'

In case a book entry has 'count' field set to 0
we crash. Spotted by Clang's static analyzer.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoRename psq_score in ReducedStateInfo
Marco Costalba [Sat, 26 May 2012 21:43:23 +0000 (22:43 +0100)]
Rename psq_score in ReducedStateInfo

So to be fully in sync with StateInfo, and move struct
to position.h, just below StateInfo.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoFix book file regression
Marco Costalba [Sat, 26 May 2012 09:11:59 +0000 (10:11 +0100)]
Fix book file regression

Revision 2aac860db3d04881103a3b0d0 of 27 / 4 / 2012
changed can_castle() signatures from bool to int and
this broke the code that calculates polyglot hash key
in book.cpp

Instead of directly fixing the code we prefer to change
castling rights definitions to align to the polyglot ones
(as we did in previous patch). After this step we can simply
take internal castle rights as they are and use them
directly to calculate polyglot book hash key, as we do
in this patch that fixes the regression.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoRedefine enum CastleRight
Marco Costalba [Sat, 26 May 2012 08:51:16 +0000 (09:51 +0100)]
Redefine enum CastleRight

To be aligned with PolyGlot book castle right definitions.

This will be used by next patch.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoAdd a known draw case in kpk bitbase generation
Marco Costalba [Sat, 19 May 2012 07:38:23 +0000 (08:38 +0100)]
Add a known draw case in kpk bitbase generation

Early classify as known draws the positions
where white king is trapped on the rook file.

Suggested by Dan Honeycutt.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoSimplify Position::print()
Marco Costalba [Sat, 12 May 2012 10:35:40 +0000 (11:35 +0100)]
Simplify Position::print()

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoRevert "Don't split if reduced below min_split_depth"
Marco Costalba [Sat, 12 May 2012 08:57:24 +0000 (09:57 +0100)]
Revert "Don't split if reduced below min_split_depth"

After extensive testing (I was off line this week and let
the test go on) it seems this change is useless:

After 33968 games on a QUAD (4 threads) at 15"+0.05
Mod vs Orig 5425 - 5550 - 22993 ELO -1 (+-2.1)

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoImprove previous patch
Marco Costalba [Sat, 12 May 2012 08:21:52 +0000 (09:21 +0100)]
Improve previous patch

Only in case of promotion we care about an upper case
promotion piece char, so std::transform() is overkill
for the task.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoJunior promotion patch
Balint Pfliegel [Fri, 11 May 2012 23:01:33 +0000 (00:01 +0100)]
Junior promotion patch

Assumption: Junior sends promotions according to the side to move (ucase/lcase).
Fact: Stockfish generally handles promotion lcase.
Patch: Handling position fen input moves always with lcase promotions.

Ported back by Portfish. No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoFix compilation with Android NDK
Marco Costalba [Wed, 9 May 2012 07:33:25 +0000 (09:33 +0200)]
Fix compilation with Android NDK

It seems ADL lookup is broken with the STLPort library. Peter says:

The compiler is gcc 4.4.3, but I don't know how many patches they
have applied to it. I think gcc has had support for Koenig lookup
a long time. I think the problem is the type of the vector iterator.
For example, line 272 in search.cpp:

 if (bookMove && count(RootMoves.begin(), RootMoves.end(), bookMove))

gives the error:

jni/stockfish/search.cpp:272: error: 'count' was not declared in this scope

Here RootMoves is:

 std::vector<RootMove> RootMoves;

If std::vector<T>::iterator is implemented as T*, then Koenig lookup
would fail because RootMove* is not in namespace std.

I compile with the stlport implementation of STL, which in its vector
class has:

 typedef value_type* iterator;

I'm not sure if this is allowed by the C++ standard. I did not find
anything that says the iterator type must belong to namespace std.
The consensus in this thread

http://compgroups.net/comp.lang.c++.moderated/argument-dependent-lookup/433395

is that the stlport iterator type is allowed.

Report and patch by Peter Osterlund.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoSimplify attacks_bb()
Marco Costalba [Tue, 1 May 2012 11:17:08 +0000 (12:17 +0100)]
Simplify attacks_bb()

And some formatting while there.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoChange pos.pieces() argument order
Marco Costalba [Tue, 1 May 2012 11:01:38 +0000 (12:01 +0100)]
Change pos.pieces() argument order

Let first argument to be the 'color'. This allows to align
pos.pieces() signatures with piece_list(), piece_count() and
all the other functions where 'color' argument is passed as
first one.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoConvert constants to decimal representation
Marco Costalba [Tue, 1 May 2012 10:33:38 +0000 (11:33 +0100)]
Convert constants to decimal representation

Hex representation doesn't add any value in those cases.
Preserve hex representation where more self-documenting
for instance for binary masks values.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoDon't split if reduced depth is below min_split_depth
Marco Costalba [Sun, 22 Apr 2012 11:59:35 +0000 (12:59 +0100)]
Don't split if reduced depth is below min_split_depth

It seems to increase SMP performances. To note that
this patch goes in the opposite direction of "Active
reparenting" where we try to reparent an idle slave
as soon as possible. Instead here we prefer to keep
it idle instead of splitting on a shallow / near the
leaves node.

After 11550 games on a QUAD (4 threads) at 15"+0.05
Mod vs Orig 1972 - 1752 - 7826 ELO +6 (+-3.6)

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoIncrease optimization level of Clang
Marco Costalba [Sun, 29 Apr 2012 22:11:23 +0000 (23:11 +0100)]
Increase optimization level of Clang

Set optimization level to 4 and get a 2.564% faster binary:

Stockfish (Clang, Level 4) bench:
$ make build ARCH=osx-x86-64 COMP=clang
(Clang does not support PGO)
Average of 4 trials:
Total time (ms): 5137.5
Nodes searched: 5631135
Nodes/second: 1096084.5

Stockfish (Clang, Level 3) bench:
$ make build ARCH=osx-x86-64 COMP=clang
(Clang does not support PGO)
Average of 4 trials:
Total time (ms): 5269.25
Nodes searched: 5631135
Nodes/second: 1068679.25

Stockfish (GCC, PGO) bench:
$ make profile-build ARCH=osx-x86-64
Average of 4 trials:
Total time (ms): 5286
Nodes searched: 5631135
Nodes/second: 1065292.25

Suggestion and performance tests by Daylen Yang.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoRemove unreachable extension condition
Marco Costalba [Sun, 29 Apr 2012 17:58:48 +0000 (18:58 +0100)]
Remove unreachable extension condition

A PvNode that givesCheck has been already granted
an extension of ONE_PLY in previous condition.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoAdd support for Mac clang compiler
Andy Duplain [Sun, 29 Apr 2012 09:14:50 +0000 (10:14 +0100)]
Add support for Mac clang compiler

Makefile modified to support the clang compiler under Mac.
This was tested using clang 4 under Mountain Lion, but should
also work fine under Lion and possibly under Snow Leopard.

It requires the 'Xcode 4.x Command Line Tools' to be installed.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoProper indenting of multiple conditions
Marco Costalba [Sat, 28 Apr 2012 10:08:10 +0000 (11:08 +0100)]
Proper indenting of multiple conditions

Triviality due to a boring saturday morning.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoRename square_empty() to is_empty()
Marco Costalba [Sat, 28 Apr 2012 09:49:52 +0000 (10:49 +0100)]
Rename square_empty() to is_empty()

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoMicro-optimize king evaluation
Marco Costalba [Sat, 28 Apr 2012 09:37:55 +0000 (10:37 +0100)]
Micro-optimize king evaluation

Reuse already calculated value, instead of calling
king_safety() again.

Patch suggested by Balint Pfliegel.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoFix wrong condition in PawnEntry::king_safety()
Marco Costalba [Fri, 27 Apr 2012 09:30:35 +0000 (10:30 +0100)]
Fix wrong condition in PawnEntry::king_safety()

Since revision 374c9e6b63d0e233371
we use also castling information to calculate king safety.
So before to reuse the cached king safety score we have to
veify not only king position, but also castling rights are
the same of the pre-calculated ones.

This is a very subtle bug, found only becuase even after
previous patch, consecutives runs of 'bench' _still_ showed
different numbers. Pawn tables are not cleared between 'bench'
runs and in the second run a king safety score, previously
evaluated under some castling rights, was reused by another
position with different castling rights instead of being
recalculated from scratch.

Bug spotted and tracked down by Balint Pfliegel

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoClear TT before running 'bench'
Marco Costalba [Thu, 26 Apr 2012 18:01:13 +0000 (19:01 +0100)]
Clear TT before running 'bench'

Now that we can call bench multiple times
from command prompt we need to ensure searched
nodes remain constant across different runs.

Spotted by Bálint Pfliegel.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoRetire "Active reparenting"
Marco Costalba [Sun, 22 Apr 2012 16:52:31 +0000 (17:52 +0100)]
Retire "Active reparenting"

After 6K games at 60" + 0.1 on QUAD with 4 threads
this implementation fails to show a measurable increase,
result is well within error bar.

Perhaps with 8 or more threads resut is better but we
don't have the hardware to test. So retire for now and
in case re-add in the future if it proves good on big
machines.

The only good news is that we don't have a regression and
implementation is stable and bug-free, so could be reused
somewhere in the future.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoFix endless reaparenting loop
Marco Costalba [Tue, 17 Apr 2012 07:11:34 +0000 (09:11 +0200)]
Fix endless reaparenting loop

The check for detecting when a split point has all the
slaves still running is done with:

   slavesMask == allSlavesMask

When a thread reparents, slavesMask is increased, then, if
the same thread finishes, because there are no more moves,
slavesMask returns to original value and the above condition
returns to be true. So that the just finished thread immediately
reparents again with the same split point, then starts and
then immediately exits in a tight loop that ends only when a
second slave finishes, so that slavesMask decrements and the
condition becomes false. This gives a spurious and anomaly
high number of faked reparents.

With this patch, that rewrites the logic to avoid this pitfall,
the reparenting success rate drops to a more realistical 5-10%
for 4 threads case.

As a side effect note that now there is no more the limit of
maxThreadsPerSplitPoint when reparenting.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoImproved cutoff check when reparenting
Marco Costalba [Mon, 16 Apr 2012 12:19:22 +0000 (14:19 +0200)]
Improved cutoff check when reparenting

Check for a cutoff occurred also high in
the tree and not only at current split
point.

This avoids some more wasted reparenting.

No functional chnage.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoUse more_than_one() instead of single_bit()
Marco Costalba [Sat, 14 Apr 2012 08:16:34 +0000 (09:16 +0100)]
Use more_than_one() instead of single_bit()

It is more correct given what the function does. In
particular single_bit() returns true also in case of
empty bitboards.

Of course also the usual renaming while there :-)

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoReparent to latest
Marco Costalba [Fri, 13 Apr 2012 05:32:55 +0000 (06:32 +0100)]
Reparent to latest

Instead of reparenting to oldest split point, try to reparent
to latest. The nice thing here is that we can use the YBWC
helpful master condition to allow the reparenting of a split
point master as long as is reparented to one of its slaves.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoDon't reparent if a cutoff is pending
Marco Costalba [Tue, 10 Apr 2012 18:48:57 +0000 (19:48 +0100)]
Don't reparent if a cutoff is pending

And update master->splitPointsCnt under lock
protection. Not stricly necessary because
single_bit() condition takes care of false
positives anyhow, but it is a bit tricky and
moving under lock is the most natural thing
to do to avoid races with "reparenting".

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoActive Reparenting
Marco Costalba [Tue, 10 Apr 2012 17:00:31 +0000 (18:00 +0100)]
Active Reparenting

In Young Brothers Wait Concept (YBWC) available slaves are
booked by the split point master, then start to search below
the assigned split point and, once finished, return in idle
state waiting to be booked by another master.

This patch introduces "Active Reparenting" so that when a
slave finishes its job on the assigned split point, instead
of passively waiting to be booked, searches a suitable active
split point and reprents itselfs to that split point. Then
immediately starts to search below the split point in exactly
the same way of the others split point's slaves. This reduces
to zero the time waiting in idle loop and should increase
scalability especially whit many (8 or more) cores.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoSync compute_xxx implementations
Marco Costalba [Mon, 9 Apr 2012 10:35:47 +0000 (11:35 +0100)]
Sync compute_xxx implementations

Also refactored Position::pos_is_ok() while there.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoMove Tempo to evaluation
Marco Costalba [Mon, 9 Apr 2012 09:34:17 +0000 (10:34 +0100)]
Move Tempo to evaluation

Apart from the semplification it is now more clear that
the actual Tempo added was half of the indicated score.
This is becuase at start compute_psq_score() added half
Tempo unit and in do_move() white/black were respectively
adding/subtracting one Tempo unit.

Now we have directly halved Tempo constant and everything
is more clear.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoMicro-optimize do_castle_move()
Marco Costalba [Mon, 9 Apr 2012 08:23:52 +0000 (09:23 +0100)]
Micro-optimize do_castle_move()

Use the same tables update trick used in do_move().

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoDisable book during analysis
Marco Costalba [Mon, 9 Apr 2012 07:09:02 +0000 (08:09 +0100)]
Disable book during analysis

It is still enabled during fixed limit search so to
use it during fixed depth/nodes/time matches.

Bug reported by Daylen.

No functional changes.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoIntroduce make_castle_right() helper
Marco Costalba [Sun, 8 Apr 2012 16:07:56 +0000 (17:07 +0100)]
Introduce make_castle_right() helper

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoShrink castlePath[] and castleRookSquare[] sizes
Marco Costalba [Sun, 8 Apr 2012 10:32:01 +0000 (11:32 +0100)]
Shrink castlePath[] and castleRookSquare[] sizes

Shrinking from [16] to [2][2] is able to speedup
perft of start position of almost 5% !

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoReduce stack usage
Marco Costalba [Sun, 8 Apr 2012 07:16:37 +0000 (08:16 +0100)]
Reduce stack usage

Shrink dimensions of the biggest stack consumers arrays.
In particular movesSearched[] can be safely shrinked
without any impact on strenght or risk of crashing.
Also MAX_PLY can be reverted to 100 with almost no impact
so to limit search recursion and hence stack allocation.

A different case is for MAX_MOVES (used by Movepicker's
moves[]), because we know that do exsist some artificial
position with about 220 legal moves, so in those cases SF
will crash. Anyhow these cases are never found in games.
An open risk remains perft, especially run above handcrafted
positions.

This patch originates from a report by Daylen that found
SF crashing on his Mac OS X 10.7.3 while in deep analysys
on the following position:

8/3Q1pk1/5p2/4r3/5K2/8/8/8 w - - 0 1

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoFix 'bench' for Chess960 case
Marco Costalba [Sat, 7 Apr 2012 13:06:42 +0000 (14:06 +0100)]
Fix 'bench' for Chess960 case

Now a fen file with Chess960 positions is
correctly parsed. But it is mandatory to set
"UCI_Chess960" option _before_ to call bench.

Note that this was not needed/possible before
adding the possibility to call 'bench' from
command prompt.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoUse bench to implement UI 'perft' command
Marco Costalba [Sat, 7 Apr 2012 12:23:43 +0000 (13:23 +0100)]
Use bench to implement UI 'perft' command

Now that we can call bench on current position
we can directly use it to perform our perft.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoTeach 'bench' to run current position
Marco Costalba [Sat, 7 Apr 2012 11:04:03 +0000 (12:04 +0100)]
Teach 'bench' to run current position

Now that we can call bench from command prompt
has a sense to teach bench to run the current
set position. To do this is enough to call bench
with 'current' as fen source parameter.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoDon't need to wait after a "ponderhit"
Marco Costalba [Sat, 7 Apr 2012 10:47:37 +0000 (11:47 +0100)]
Don't need to wait after a "ponderhit"

It is enough to wake up main thread. This is
a better fix than d033d5e06a604f.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoRevert "Penalty for undefended rook"
Marco Costalba [Sat, 7 Apr 2012 10:34:22 +0000 (11:34 +0100)]
Revert "Penalty for undefended rook"

After extensive test Gary says:

"So, after 16k games at 10"+1" on an i7, the undefended rook test
looks to be not good (albeit by a very small margin).
3063 - 3093 - 9844 (-1).

I doubt that is causing the regression, but even so, it looks like
it's not worth keeping, and we can go back to the simpler undefended
minors check."

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoReplace Position::copy()
Marco Costalba [Fri, 6 Apr 2012 18:13:48 +0000 (19:13 +0100)]
Replace Position::copy()

With assignment operator. And fix Position::flip().

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoRevert thread_local stuff
Marco Costalba [Fri, 6 Apr 2012 17:36:46 +0000 (18:36 +0100)]
Revert thread_local stuff

Unfortunatly accessing thread local variable
is much slower than object data (see previous
patch log msg), so we have to revert to old code
to avoid speed regression.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoUse thread_local compiler specifics
Marco Costalba [Fri, 6 Apr 2012 16:01:41 +0000 (17:01 +0100)]
Use thread_local compiler specifics

Much faster then pthread_getspecific() but still a
speed regression against the original code.

Following are the nps on a bench:

Position
454165
454838
455433

tls
441046
442767
442767

ms (Win)
450521
447510
451105

ms (pthread)
422115
422115
424276

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoFix a (theoretical) race leading to a crash
Marco Costalba [Fri, 6 Apr 2012 14:22:02 +0000 (15:22 +0100)]
Fix a (theoretical) race leading to a crash

After we release the SplitPoint lock the master, suppose
is main thread, can safely return and if a "quit" command
is pending, main thread exits and associated Thread object
is freed. So when we access master->is_searching a crash
occurs.

I have never found such a race that is of course very rare
becuase assumes that from lock releasing we go to sleep for
a time long enough for the main thread to end the search and
return. But you can never know, and anyhow a race is a race.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoTeach UI thread to use main thread resources
Marco Costalba [Fri, 6 Apr 2012 13:17:08 +0000 (14:17 +0100)]
Teach UI thread to use main thread resources

So to avoid a crash when setting the moves in
UCI "position startpos moves ...." command.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoDon't store Thread info in Position
Marco Costalba [Fri, 6 Apr 2012 12:46:53 +0000 (13:46 +0100)]
Don't store Thread info in Position

But use the newly introduced local storage
for this. A good code semplification and also
the correct way to go.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoIntroduce thread local storage
Marco Costalba [Fri, 6 Apr 2012 10:39:07 +0000 (12:39 +0200)]
Introduce thread local storage

Use thread local storage to store a pointer to the thread we
are running on. This will allow to remove thread info from
Position class.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoRewrite pop_1st_bit() to be endian independent
Marco Costalba [Fri, 6 Apr 2012 09:37:07 +0000 (11:37 +0200)]
Rewrite pop_1st_bit() to be endian independent

With this change sources are fully endianess
independent, so we can simplify the Makefile.

Somewhat surprisingly we don't have any speed
regression !

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoUse a Thread instead of an array index
Marco Costalba [Wed, 4 Apr 2012 06:54:02 +0000 (07:54 +0100)]
Use a Thread instead of an array index

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoBig Position renaming
Marco Costalba [Mon, 2 Apr 2012 17:21:17 +0000 (18:21 +0100)]
Big Position renaming

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoMicro-optimize last_1() for 32bits
Marco Costalba [Wed, 4 Apr 2012 05:52:07 +0000 (06:52 +0100)]
Micro-optimize last_1() for 32bits

Verified assembly it is a bit simpler.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoFix bench with fen files regression
Marco Costalba [Mon, 2 Apr 2012 17:38:50 +0000 (18:38 +0100)]
Fix bench with fen files regression

Erroneusly adds default positions to the fens
loaded from external file.

Bug introduced in adb71b8096436a

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoSimplify Endgames::probe()
Marco Costalba [Mon, 2 Apr 2012 06:41:26 +0000 (07:41 +0100)]
Simplify Endgames::probe()

With this API change we simplify both function and caller site.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoUse polymorphism to resolve map() overloading
Marco Costalba [Sun, 1 Apr 2012 14:12:39 +0000 (15:12 +0100)]
Use polymorphism to resolve map() overloading

The 2 overload functions map() accept a pointer to
EndgameBase<Value> or a pointer to EndgameBase<ScaleFactor>.

Because Endgame<E> is derived from one of them we can
directly use a pointer to this class to resolve the
overload as is needed in Endgames::add().

Also made class Endgames fully parametrized and no more
hardcoded to the types (Value or ScaleFactor) of endgames
stored.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoUse a std::vector to store searchMoves
Marco Costalba [Sun, 1 Apr 2012 11:26:14 +0000 (12:26 +0100)]
Use a std::vector to store searchMoves

A std::set (that is a rb_tree) seems really
overkill to store at most a handful of moves
and nothing in the common case.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoRetire platform specifics include in misc.cpp
Marco Costalba [Sun, 1 Apr 2012 11:00:15 +0000 (12:00 +0100)]
Retire platform specifics include in misc.cpp

Now that platform.h is included in types.h we
don't need this stuff anymore.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoBetter document square flipping helpers
Marco Costalba [Sun, 1 Apr 2012 10:30:54 +0000 (11:30 +0100)]
Better document square flipping helpers

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoIntroduce Bitboards namespace
Marco Costalba [Sun, 1 Apr 2012 09:46:38 +0000 (10:46 +0100)]
Introduce Bitboards namespace

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoProcess 'bench' also from SF prompt
Marco Costalba [Sun, 1 Apr 2012 08:25:07 +0000 (09:25 +0100)]
Process 'bench' also from SF prompt

It is possible to start with 'stockfish', then from
command prompt type 'bench' and SF will do what you expect.
Old behaviour is anyhow preserved. As a bonus we can now
start from command line any UCI command understood by
Stockfish. The difference is that after execution of a
command from arguments SF quits, while at the end of the
same command from prompt SF stays in UCI loop.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoUse std::vector to implement HashTable
Marco Costalba [Sat, 31 Mar 2012 11:15:57 +0000 (12:15 +0100)]
Use std::vector to implement HashTable

Allows some code semplification and avoids directly
allocation and managing heap memory.

Also the usual renaming while there.

No functional change and no speed regression.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoRename Materials and Pawns hash stuff
Marco Costalba [Sat, 31 Mar 2012 08:43:16 +0000 (09:43 +0100)]
Rename Materials and Pawns hash stuff

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
12 years agoComplete the renaming in Search::LimitsType
Marco Costalba [Sat, 31 Mar 2012 08:16:09 +0000 (09:16 +0100)]
Complete the renaming in Search::LimitsType

This completes the job started with revision
4124c94583c8f61.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>