Marco Costalba [Sun, 9 Oct 2011 07:22:13 +0000 (08:22 +0100)]
Link Time Optimization doesn't needs -static
Justin reports that it breaks the compilation on Fedore 15 and as Tom says:
-static is only needed to work around the gcc on ubuntu 11.10 beta bug.
If -static introduces issues on its own then it is better to remove it.
It will not be needed in most environments.
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Sat, 8 Oct 2011 09:51:39 +0000 (10:51 +0100)]
Better document how MultiPV search works
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Sat, 8 Oct 2011 08:25:38 +0000 (09:25 +0100)]
Send again all the PV lines in multiPV searching
Partially revert
1036cadcecc43737 because UCI protocol
in case of multipv explicitly requires:
for the best move/pv add "multipv 1" in the string when you send the pv.
in k-best mode always send all k variants in k strings together.
Thanks to Justin Blanchard for pointing this out.
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Sat, 8 Oct 2011 07:17:37 +0000 (08:17 +0100)]
Added gcc -msse3 support
It is enabled when selecting x86-64-modern target, this gives
another nice speed up:
On a Core i5-2500 (3300 Mhz, Sandy Bridge):
64 bit download version:
1597151 n/s
-flto :
1659664 n/s
-flto -msse3:
1732344 n/s
Patch suggested by Tom Vijlbrief.
Also unify flto, popcount and msse3 optimization under "modern"
target, note that this can break the "modern" build on old gcc that
do not support -flto option: in this case update gcc ;-) or default
to the standard build.
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Tom Vijlbrief [Thu, 6 Oct 2011 16:25:36 +0000 (18:25 +0200)]
Added gcc lto (Link Time Optimization) option
Just by adding the -flto option to CXXFLAGS link command
we can gain a few percent in speed.
On a Core i5-2500 (3300 Mhz, Sandy Bridge):
64 bit download version:
Without -flto:
1597151 n/s
With -flto :
1659664 n/s
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Mon, 3 Oct 2011 08:56:49 +0000 (09:56 +0100)]
Shrink names of move helpers
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Mon, 3 Oct 2011 08:23:04 +0000 (09:23 +0100)]
Small touches in position.h
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Mon, 3 Oct 2011 07:02:46 +0000 (08:02 +0100)]
Small touches to book.cpp
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Sun, 2 Oct 2011 07:33:40 +0000 (08:33 +0100)]
Better naming borrowed from Critter
In line with http://chessprogramming.wikispaces.com conventions.
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Sat, 1 Oct 2011 22:39:39 +0000 (23:39 +0100)]
Revert "Retire Rml full PV search at depth == 1"
Yet another random crash source !
Hopefully this is the last one.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Sat, 1 Oct 2011 09:47:43 +0000 (10:47 +0100)]
Rename kingZone[] and reverse the king's color
Seems easier to understand to me. From Critter.
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Sat, 1 Oct 2011 05:35:24 +0000 (06:35 +0100)]
Document why Book is defined static
This was not clear to someone on talkchess and actually
is not trivial to understand.
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Mon, 26 Sep 2011 05:07:11 +0000 (06:07 +0100)]
When exiting wake up all threads at once
It seems we have a very rare crash under Linux, once
every 10K games without this patch.
Is faster to wake up all the threads, especially on SMP,
where the threads can then exit in parallel while the main
thread is waiting for the next one to terminate.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Sun, 25 Sep 2011 15:28:38 +0000 (16:28 +0100)]
No need to test for MOVE_NONE before move_is_ok()
Function move_is_ok() already catches the move == MOVE_NONE case.
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Sun, 18 Sep 2011 18:50:42 +0000 (19:50 +0100)]
Update killers after a TT hit
Almost no increase but seems the logic thing to do.
After 16707 games 2771 - 2595 - 11341 ELO +3 (+- 3.2)
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Sat, 17 Sep 2011 15:41:01 +0000 (16:41 +0100)]
Correctly score capture underpromotions
Be sure a queen capture promotion is tried in front of
an underpromotion.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Wed, 14 Sep 2011 05:16:46 +0000 (06:16 +0100)]
Don't lock before check for termination
Restore old locking scheme changed with
commit
1e92df6b20aa2240.
This seems to prevent a very rare crash that occurs
once every 5-10K games.
With this patch we have no crashes after 33K games.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Sun, 11 Sep 2011 09:45:59 +0000 (10:45 +0100)]
Use the map type template parameter to access map()
It is more natural than using the family subtype and also
use two single maps instead of a std::pair.
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Sun, 11 Sep 2011 09:00:52 +0000 (10:00 +0100)]
Lookup square distance instead of calculate on the fly
Microptimization that gives a +0.7% speed increase.
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Sun, 21 Aug 2011 19:11:37 +0000 (20:11 +0100)]
Detect family type of endgame from its enum value
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Sun, 14 Aug 2011 11:36:34 +0000 (12:36 +0100)]
Indulge a bit on the template wizardy
Push the template pedal a bit in our "showoff" endgame code ;-)
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Sun, 14 Aug 2011 10:52:27 +0000 (11:52 +0100)]
Small simplification of endgame functions API
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Fri, 12 Aug 2011 09:42:08 +0000 (11:42 +0200)]
Fix use of uninitialized variable
When initializing endgames map we build a faked FEN string
in mat_key() to get the position hash's key.
This fen string lacks full move numbers, so when parsing the
fen in Position::from_fen() we leave startPosPly un-initialized.
Spotted by Valgrind (this is a kind of bug that is almost impossible
for humans to find).
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Fri, 12 Aug 2011 08:53:32 +0000 (10:53 +0200)]
Fix silly icc remark #2259
Another stupid remark to quiet out:
remark #2259: non-pointer conversion from "int" to "UINT16={unsigned short}"
may lose significant bits
In this case icc always converts to an integer the result of a shift operation
if the bit size of the operand is smaller, hence the warning when assignin
back to n.
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Wed, 10 Aug 2011 11:12:10 +0000 (12:12 +0100)]
Use a boolean instead as thread's state
Now that we have just two mutually exclusive thread's states
we can repleace them by a simple boolean.
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Wed, 10 Aug 2011 11:05:33 +0000 (12:05 +0100)]
Remove Thread::WORKISWAITING
Set the state directly to Thread::SEARCHING
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Tue, 9 Aug 2011 20:08:55 +0000 (21:08 +0100)]
Don't need pthread_detach() after pthread_join()
Spotted by Joona and verified with Valgrind.
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Tue, 9 Aug 2011 13:19:44 +0000 (14:19 +0100)]
Change start_routine argument
Directly pass the thread pointer.
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Thu, 4 Aug 2011 13:14:56 +0000 (14:14 +0100)]
Retire Rml full PV search at depth == 1
Now that Rml ordering is based on normal MovePicker logic,
apart for the ttMove that is given, we can avoid to score
all the root moves at depth 1. We only need it for easy move
detection logic, but in this case we just need to score the
first two best moves and not all the Rml set.
No regression after 6400 games
Mod vs Orig 1052 1012 4336 ELO +2 (+- 4.9)
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Mon, 8 Aug 2011 22:07:09 +0000 (23:07 +0100)]
Retire ThreadsManager::init_hash_tables()
Allocation of pawn and material hash tables should
be strictly bounded to the change of the number of
activeThreads, so move the code inside set_size().
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Mon, 8 Aug 2011 20:25:37 +0000 (21:25 +0100)]
Retire Thread::TERMINATED
Use proper way to detect for thread terimnation instead of
our homegrown flag.
It adds more code than it removes and adds also platform specific
code, neverthless I think is the way to go becuase Thread::TERMINATED
flag is intrinsecly racy given that when we raise it thread is still
_not_ terminated nor it can be, and also we don't want to reinvent
the (broken) wheel of thread termination detection when there is
already available the proper one.
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Mon, 8 Aug 2011 12:41:58 +0000 (13:41 +0100)]
Retire Thread::INITIALIZING
Was used to prevent issues when creating multiple threads
on Windows, but now it seems we can remove it safely.
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Mon, 8 Aug 2011 11:03:16 +0000 (12:03 +0100)]
Move idle_loop() under Thread
This greatly removes clutter from the difficult idle_loop() function
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Mon, 8 Aug 2011 09:53:52 +0000 (10:53 +0100)]
Tidy up comments in thread.cpp
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Mon, 8 Aug 2011 09:08:41 +0000 (10:08 +0100)]
Retire broken SendSearchedNodes
Now that we can split at root it happens that SendSearchedNodes
works only once at the end of the iteration, but this is useless
becuase speed info is sent anyhow toghter with the pv line.
So retire for now, waiting to find something SMP compatible.
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Sun, 7 Aug 2011 09:29:47 +0000 (10:29 +0100)]
Sync search() and qsearch() alpha update
Change qsearch() to reflect alpha update logic
of search().
To be consistent changed also moves loop condition and
futility pruning condition.
No regression after 5072 games at TC 10"+0.1
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Sun, 7 Aug 2011 18:56:53 +0000 (19:56 +0100)]
Retire Thread::BOOKED
Start a slave as soon as is allocated.
No functional change with faked split.
Regression tested the full split() series and after
2000 games no regression and no crash.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Sun, 7 Aug 2011 14:15:19 +0000 (15:15 +0100)]
Fix obey the "maxThreadsPerSplitPoint" setting
Spotted by Joona.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Sun, 7 Aug 2011 08:24:40 +0000 (09:24 +0100)]
Do not modify alpha in split()
When calling split or we immediately return because unable to
find available slaves, or we start searching on _all_ the moves
of the node or until a cut-off occurs, so that when returning
from split we immediately leave the moves loop.
Because of this we don't need to change alpha inside split() and
we can use a signature similar to search() so to better clarify
that split() is actually a search on the remaining node's moves.
No functional change with faked split.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Sat, 6 Aug 2011 18:11:35 +0000 (19:11 +0100)]
Initialize a new split point out of lock
Allocate and initialize a new split point
out of lock becuase modified data is local to
master thread only.
Also better document why we need a lock at
the end of split().
No functional change with faked split.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Sat, 6 Aug 2011 10:19:13 +0000 (11:19 +0100)]
Update comment on why we call root search with ss+1
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Sat, 6 Aug 2011 09:56:06 +0000 (10:56 +0100)]
Fix an assert when stopping the search
When StopRequest is raised we cannot immediately exit the
move loop but first we need to update bestValue so to avoid
assert:
assert(bestValue > -VALUE_INFINITE && bestValue < VALUE_INFINITE);
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Joona Kiiski [Sat, 6 Aug 2011 08:43:46 +0000 (09:43 +0100)]
Split at root!
Another great success by Joona !
After 5876 games at 10"+0.1
Mod vs Orig: 1073 - 849 - 3954 ELO +13 (+- 5.2)
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Joona Kiiski [Sat, 6 Aug 2011 08:15:46 +0000 (09:15 +0100)]
Preparations for splitting at root
No functional change
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Fri, 5 Aug 2011 06:23:54 +0000 (07:23 +0100)]
Simplify MovePickerExt<>
Now that we don't special case the root moves anymore
we don't need to pass NodeType anymore as template parameter,
a simple bool to detect a SpNode will be enough.
Spotted by Joona.
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Fri, 5 Aug 2011 06:15:45 +0000 (07:15 +0100)]
Fix silly bug in uci loop
After issuing "go"-command, at the end of the search
SF shows: "Unknown command: ...".
Spotted by Joona.
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Thu, 4 Aug 2011 09:10:03 +0000 (10:10 +0100)]
Fix a (silly) warning under icc compiler
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Wed, 3 Aug 2011 13:24:55 +0000 (14:24 +0100)]
Use std::lexicographical_compare() in UCI options
Instead of our home grown function to perform a case
insensitive compare on option names as required by UCI
protocol.
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Tue, 2 Aug 2011 21:11:19 +0000 (22:11 +0100)]
Consistently set ttMove to Rml.pv[0] in root node
No functional change, but reduce risks of subtle aliasing bugs.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Tue, 2 Aug 2011 20:44:22 +0000 (21:44 +0100)]
Fix an off-by-one error in UCI print loop
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Tue, 2 Aug 2011 17:49:06 +0000 (18:49 +0100)]
Rename ok_to_use_TT() in can_return_tt()
Seems more appropiate. From Lucas Braesch's DoubleCheck.
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Tue, 2 Aug 2011 16:59:06 +0000 (17:59 +0100)]
Send PV only for updated lines
It seems FritzGUI already remembers the old lines, so
we just need to update PV info only for the new lines.
Also introduced prevScore field in RootMove to avoid
a bulk copy of Rml.
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Tue, 2 Aug 2011 08:53:56 +0000 (09:53 +0100)]
Sort PV moves always in two steps
This should fix following issue:
Suppose the search with MultiPVIteration == 0 returns an exact score
move = Nxf4, score = 100
Now search with MultiPVIteration == 1 and get two scores
move = Qg8, score = 150
move = Ra1, score = 180
If we now reorder all the moves in one step we end up with
pv[0] = Ra1, pv[1] = Qg8
Instead reordering as the current patch we end up in:
pv[0] = Ra1, pv[1] = Nxf4
preserving the first searched move.
No functional change in single PV.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Tue, 2 Aug 2011 06:50:14 +0000 (07:50 +0100)]
Small cleanup of previous patches
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Joona Kiiski [Sun, 31 Jul 2011 22:15:11 +0000 (01:15 +0300)]
Reimplement MultiPV mode
No functional change
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Joona Kiiski [Sun, 31 Jul 2011 12:18:52 +0000 (15:18 +0300)]
Reimplement support for "searchmoves" option
No functional change
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Joona Kiiski [Sun, 31 Jul 2011 12:02:36 +0000 (15:02 +0300)]
Remove now unused RootMove.non_pv_score
No functional change
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Joona Kiiski [Sat, 30 Jul 2011 21:00:54 +0000 (00:00 +0300)]
Make root search to use standard MovePicker.
This patch temporarily breaks MultiPV and searchmove
features, but they will be re-implemented in future
patches.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Joona Kiiski [Thu, 28 Jul 2011 21:02:50 +0000 (00:02 +0300)]
Don't probe TT at RootNode
In that case we should also update RootMoveList to avoid
bogus output
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Tue, 26 Jul 2011 07:47:20 +0000 (09:47 +0200)]
Fix pretty_pv() output in Chess960
And move it to search.cpp
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Joona Kiiski [Sun, 24 Jul 2011 10:56:47 +0000 (11:56 +0100)]
Fix PV output in Chess960
We missed to set chess960 flag into the std::stringstream used to
setup the PV line.
Bug introduced with commit
f803f33e6383fea1074aca2cf625983e148a6668
of 30/12/2010 when we started to print PV line into a std::stringstream
instead of directly into cout, where the chess960 flag is correctly set.
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Sun, 24 Jul 2011 07:26:35 +0000 (08:26 +0100)]
Tidy up benchmark.cpp
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Sun, 24 Jul 2011 06:56:26 +0000 (07:56 +0100)]
Rename execute_uci_command() to uci_loop()
As a side effect now root position can be directly
allocated on the stack and doesn't need to be defined
static anymore.
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Sun, 24 Jul 2011 06:22:37 +0000 (07:22 +0100)]
Unhide the istringstream behind UCIParser
It is misnamed because it is not a parser, perhaps a
tokenizer, anyhow better call it for what it is, an
input string stream.
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Sun, 24 Jul 2011 04:59:16 +0000 (05:59 +0100)]
Fix startpos_ply_counter() regression
Return the correct number of played plies at the end
of the setup moves. Currently it always returns 0 when
starting from start position, like in real games.
We fix this adding st->pliesFromNull that starts from 0
and is incremented after each setup move and is never
reset in the setup phase but only once search is started.
It is an hack because startpos_ply_counter() will return
different values during the search and is correct only
at the beginning of the search.
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Sat, 23 Jul 2011 11:52:49 +0000 (12:52 +0100)]
Use a circular buffer to keep track of setup states
This fixes a regression on real games due to the fact that
we have some mismatches:
history[st->gamePly - i] != stp->key
when st->gamePly - i == 0,this is due to a nasty bug I have
introduced when using std::vector<> as StateInfo backup. The
point is that StateInfo keeps inside a pointer to the previous
StateInfo in a kind of linked list. But when std::vector<> is
resized reallocates a larger chunk of memory and moves the
data there so these pointers became stale.
This patch fixes the issue.
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Wed, 20 Jul 2011 08:45:40 +0000 (10:45 +0200)]
Don't update gamePly after each move
We just need startup value to calculate available
thinking time. So remove from state.
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Wed, 20 Jul 2011 08:21:41 +0000 (10:21 +0200)]
Use std::vector<Move> to store UCI search moves
Avoid the ugly and anyhow incorrect hard limit on the
maximum number of moves and allow to handle an arbitrary
number of moves to search.
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Wed, 20 Jul 2011 08:01:12 +0000 (10:01 +0200)]
Use st->gamePly to store fullMoves
This allow to retire do_setup_move() and also to simplify
draw detection logic becuase now we always have:
Min(st->rule50, st->gamePly) = st->rule50
This was already true when starting from starting position,
but now is true even when starting from a FEN string because
now we take in account fullmove number in counting gamePly so
that it is always.
st->rule50 <= st->gamePly
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Mon, 18 Jul 2011 08:20:37 +0000 (10:20 +0200)]
Retire history[]
Use key saved in state instead.
No functional change (in real games) and no speed regression.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Joona Kiiski [Sat, 23 Jul 2011 21:18:28 +0000 (22:18 +0100)]
Do not exit early even when seeing mate
Fixes the reported KNNK ending problem:
http://talkchess.com/forum/viewtopic.php?t=39347
Joona says:
Now I finally had a time to take a look at on this issue.
I've reproduced the problem starting from this position:
1B6/1B2k3/P7/1P3p2/1K6/8/4b3/4b3 w - - 6 85
I made Stockfish play as white and Fruit as black.
I repeated test ten times and once SF was not able to deliver mate.
But I observed several times that SF had reported on last something like mate in 10.
However next time it played move with score mate in 15.
Easiest way to solve the problem is attached as a patch. I tested it several times and SF always
ended up playing the optimal move. Of course the downside is that now delivering mate
takes a bit longer, but IMO it's better to lose once in a while by time in sudden death
game than not being able to deliver simple mate with long time controls.
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Wed, 20 Jul 2011 02:31:50 +0000 (03:31 +0100)]
Revert previous patches due to bug
We have a bug (possibly because of returning draw from
root move list), it is possible to see when looking at
games with a GUI, we can see rarely but consistently the
score return as #0 for many depths until it comes back to
normal values.
Revert patches until it is not fixed.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Joona Kiiski [Mon, 11 Jul 2011 23:00:30 +0000 (02:00 +0300)]
Move the draw check also for qsearch
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Joona Kiiski [Mon, 11 Jul 2011 21:09:50 +0000 (00:09 +0300)]
Move draw checks right after doing the move
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Sun, 17 Jul 2011 11:26:50 +0000 (12:26 +0100)]
Small touches in set_option()
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Sun, 17 Jul 2011 09:22:08 +0000 (10:22 +0100)]
Validate input UCI moves
Running following command:
position startpos moves e1e8
Makes SF to assert in debug mode in do_move() but to accept
bad input and continue in release mode where probably it is
going to crash little later.
So validate input before to feed do_move().
Suggestion by Yakovlev Vadim.
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Sat, 16 Jul 2011 21:59:14 +0000 (22:59 +0100)]
Remove some useless include
Spotted by Rein Halbersma.
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Sat, 16 Jul 2011 09:42:27 +0000 (10:42 +0100)]
Don't need to assert for pos.is_ok() when position is constant
It's only necessary to do the checking at the end of every non-const
member (including the constructors and from_fen()) of class Position.
Once the post-condition of every modifier guarantees the class invariant,
we don't need to verify sanity of the position as preconditions for outside
callers such as movegen, search etc. For non-class types such as Move and
Square we still need to assert of course.
Suggested by Rein Halbersma.
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Sat, 16 Jul 2011 08:56:34 +0000 (09:56 +0100)]
Change hidden checkers API
After previous patch is no more needed to pass
the color, becuase it is always the side to move.
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Sat, 16 Jul 2011 08:36:03 +0000 (09:36 +0100)]
Simplified discovered check connected_moves()
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Fri, 15 Jul 2011 21:24:18 +0000 (22:24 +0100)]
Simplify and micro-optimize hidden_checkers()
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Fri, 15 Jul 2011 20:51:19 +0000 (21:51 +0100)]
No need to declare default Position c'tor
Pointed out by Rein Halbersma.
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Fri, 15 Jul 2011 11:20:31 +0000 (12:20 +0100)]
Fix a warning under MSVC
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Fri, 15 Jul 2011 09:40:09 +0000 (11:40 +0200)]
Fix parametrized direction in pawns generation
It worked by accident because we always called both directions,
but definition was wrong.
Functional change due to different generation order, but
perft numbers are the correct ones.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Fri, 15 Jul 2011 09:19:49 +0000 (11:19 +0200)]
Cleanup handling of Delta enums
Ispired by Rein's code.
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Thu, 14 Jul 2011 11:12:49 +0000 (12:12 +0100)]
Use std library to sort moves
Functional change due to the fact that now pick_best() is
stable, but should be no change in strenght.
Example code and ideas by Rein Halbersma.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Mon, 11 Jul 2011 10:17:50 +0000 (11:17 +0100)]
Fix icc's "unreachable code" warning
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Sun, 3 Jul 2011 10:32:34 +0000 (11:32 +0100)]
Teach to_fen() about Halfmove and Fullmove number
And also fix the last '/' at the end of the piece placement field.
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Sun, 3 Jul 2011 09:38:20 +0000 (10:38 +0100)]
Use MoveList also in Position::move_is_pl_slow()
And rename it in Position::move_is_legal()
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Sun, 3 Jul 2011 09:08:09 +0000 (10:08 +0100)]
Retire move_is_short_castle() and move_is_long_castle()
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Sat, 2 Jul 2011 15:15:20 +0000 (16:15 +0100)]
Restore startpos_ply_counter() instead of full_moves()
And pass correct currentPly to TimeManager::init().
This restores old behaviour, in particular now black has
a different timing than white becuase is no more:
currentPly = 2 * fullMoveNumber;
but becomes
2 * (fullMoves - 1) + int(sideToMove == BLACK)
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Sat, 2 Jul 2011 12:33:06 +0000 (13:33 +0100)]
Introduce and use struct MoveList
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Sat, 2 Jul 2011 10:52:22 +0000 (11:52 +0100)]
Remove MSVC debug window hack in bench
Interference with profile-build under mingw
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Sat, 2 Jul 2011 10:01:12 +0000 (11:01 +0100)]
Rearrange structs to avoid internal padding
Found with gcc -Wpadded gcc option.
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Sat, 2 Jul 2011 08:45:41 +0000 (09:45 +0100)]
Revert PHQ-2
No clear advantage again standard, possibly we will
retest before to release.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Thu, 30 Jun 2011 14:28:58 +0000 (16:28 +0200)]
Small touches to do/undo_castle_move()
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Thu, 30 Jun 2011 08:29:58 +0000 (10:29 +0200)]
Better document generate_castle_moves()
No functional change also in Chess960
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Sat, 25 Jun 2011 13:31:57 +0000 (14:31 +0100)]
Small tweaks to search()
No functional change also in faked split mode
To be sure verified in real games with 4 threads TC 2"+0.1
After 11125 games 2497 - 2469 - 6159 ELO +0 (+- 4.4)
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Wed, 29 Jun 2011 16:40:33 +0000 (17:40 +0100)]
Remove duplicated enum Phase definition
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
Marco Costalba [Tue, 28 Jun 2011 17:01:51 +0000 (18:01 +0100)]
Retire find_checkers()
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>