From ffa150bec3af540fbaff57fdbb657940225e69e6 Mon Sep 17 00:00:00 2001 From: Joona Kiiski Date: Sat, 6 Aug 2011 09:43:46 +0100 Subject: [PATCH] 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 --- src/search.cpp | 11 ++++++----- src/thread.cpp | 8 ++++---- src/thread.h | 4 ++-- 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/src/search.cpp b/src/search.cpp index 0dccf934..cc910f7d 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -1226,15 +1226,14 @@ split_point_start: // At split points actual search starts from here } // 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(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(pos, ss+1, tsp->alpha, tsp->beta, tsp->depth); + else if (tsp->nodeType == PV) search(pos, ss+1, tsp->alpha, tsp->beta, tsp->depth); - else + else if (tsp->nodeType == NonPV) search(pos, ss+1, tsp->alpha, tsp->beta, tsp->depth); assert(threads[threadID].state == Thread::SEARCHING); diff --git a/src/thread.cpp b/src/thread.cpp index c7cabeb7..4ef14578 100644 --- a/src/thread.cpp +++ b/src/thread.cpp @@ -240,7 +240,7 @@ bool ThreadsManager::available_slave_exists(int master) const { template 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(Position&, SearchStack*, Value*, const Value, Value*, Depth, Move, int, MovePicker*, bool); -template void ThreadsManager::split(Position&, SearchStack*, Value*, const Value, Value*, Depth, Move, int, MovePicker*, bool); +template void ThreadsManager::split(Position&, SearchStack*, Value*, const Value, Value*, Depth, Move, int, MovePicker*, int); +template void ThreadsManager::split(Position&, SearchStack*, Value*, const Value, Value*, Depth, Move, int, MovePicker*, int); diff --git a/src/thread.h b/src/thread.h index 10062031..038d8e39 100644 --- a/src/thread.h +++ b/src/thread.h @@ -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 @@ public: template 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; -- 2.39.2