Permalink
Browse files

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>
  • Loading branch information...
1 parent 13bc6ba commit ffa150bec3af540fbaff57fdbb657940225e69e6 @zamar zamar committed with Aug 6, 2011
Showing with 12 additions and 11 deletions.
  1. +6 −5 src/search.cpp
  2. +4 −4 src/thread.cpp
  3. +2 −2 src/thread.h
View
@@ -1226,15 +1226,14 @@ namespace {
}
// Step 19. Check for split
- if ( !RootNode
- && !SpNode
+ if ( !SpNode
&& depth >= Threads.min_split_depth()
&& bestValue < beta
&& Threads.available_slave_exists(pos.thread())
&& !StopRequest
&& !thread.cutoff_occurred())
Threads.split<FakeSplit>(pos, ss, &alpha, beta, &bestValue, depth,
- threatMove, moveCount, &mp, PvNode);
+ threatMove, moveCount, &mp, NT);
}
// Step 20. Check for mate and stalemate
@@ -2210,9 +2209,11 @@ void ThreadsManager::idle_loop(int threadID, SplitPoint* sp) {
memcpy(ss, tsp->ss - 1, 4 * sizeof(SearchStack));
(ss+1)->sp = tsp;
- if (tsp->pvNode)
+ if (tsp->nodeType == Root)
+ search<SplitPointRoot>(pos, ss+1, tsp->alpha, tsp->beta, tsp->depth);
+ else if (tsp->nodeType == PV)
search<SplitPointPV>(pos, ss+1, tsp->alpha, tsp->beta, tsp->depth);
- else
+ else if (tsp->nodeType == NonPV)
search<SplitPointNonPV>(pos, ss+1, tsp->alpha, tsp->beta, tsp->depth);
assert(threads[threadID].state == Thread::SEARCHING);
View
@@ -240,7 +240,7 @@ bool ThreadsManager::available_slave_exists(int master) const {
template <bool Fake>
void ThreadsManager::split(Position& pos, SearchStack* ss, Value* alpha, const Value beta,
Value* bestValue, Depth depth, Move threatMove,
- int moveCount, MovePicker* mp, bool pvNode) {
+ int moveCount, MovePicker* mp, int nodeType) {
assert(pos.is_ok());
assert(*bestValue >= -VALUE_INFINITE);
assert(*bestValue <= *alpha);
@@ -275,7 +275,7 @@ void ThreadsManager::split(Position& pos, SearchStack* ss, Value* alpha, const V
splitPoint.threatMove = threatMove;
splitPoint.alpha = *alpha;
splitPoint.beta = beta;
- splitPoint.pvNode = pvNode;
+ splitPoint.nodeType = nodeType;
splitPoint.bestValue = *bestValue;
splitPoint.mp = mp;
splitPoint.moveCount = moveCount;
@@ -341,5 +341,5 @@ void ThreadsManager::split(Position& pos, SearchStack* ss, Value* alpha, const V
}
// Explicit template instantiations
-template void ThreadsManager::split<false>(Position&, SearchStack*, Value*, const Value, Value*, Depth, Move, int, MovePicker*, bool);
-template void ThreadsManager::split<true>(Position&, SearchStack*, Value*, const Value, Value*, Depth, Move, int, MovePicker*, bool);
+template void ThreadsManager::split<false>(Position&, SearchStack*, Value*, const Value, Value*, Depth, Move, int, MovePicker*, int);
+template void ThreadsManager::split<true>(Position&, SearchStack*, Value*, const Value, Value*, Depth, Move, int, MovePicker*, int);
View
@@ -38,7 +38,7 @@ struct SplitPoint {
const Position* pos;
Depth depth;
Value beta;
- int pvNode;
+ int nodeType;
int ply;
int master;
Move threatMove;
@@ -116,7 +116,7 @@ class ThreadsManager {
template <bool Fake>
void split(Position& pos, SearchStack* ss, Value* alpha, const Value beta, Value* bestValue,
- Depth depth, Move threatMove, int moveCount, MovePicker* mp, bool pvNode);
+ Depth depth, Move threatMove, int moveCount, MovePicker* mp, int nodeType);
private:
Thread threads[MAX_THREADS];
Lock mpLock;

0 comments on commit ffa150b

Please sign in to comment.