From: Marco Costalba Date: Sat, 28 Sep 2013 07:59:45 +0000 (+0200) Subject: Revert "Use a per-thread array" X-Git-Url: https://git.sesse.net/?p=stockfish;a=commitdiff_plain;h=c65d67feb53895a34423cc2043edc69741f2ba92;hp=bc6faf633e7f4d2c998f434a41ecfc9b80047607 Revert "Use a per-thread array" This reverts commit 800410eef1c0811 and instead increases stack size. I went through the old emails with Daylen that reported the crash issue on Mac OS X and was fixed by 0049d3f337b6f3a66a0. It was reported default stack size for a thread in Mac OS X is 8 megabytes while the patch that we are reverting allows to reduce stack size at max of about 217KB, so the reason for the crash was only marginal in MAX_MOVES value. On those emails Daylen also hinted how to increase stack size for Mac OS X to 16MB. So prefer to increase stack size to 16MB instad of re-inventing the wheel and do our home grown stack as we did with the patch that we are now reverting (it will remain anyhow in git history for documentation purposes). No functional change. --- diff --git a/src/Makefile b/src/Makefile index 1f9f27da..fd5290be 100644 --- a/src/Makefile +++ b/src/Makefile @@ -273,7 +273,7 @@ ifneq ($(comp),mingw) endif ifeq ($(os),osx) - LDFLAGS += -arch $(arch) -mmacosx-version-min=10.0 + LDFLAGS += -arch $(arch) -mmacosx-version-min=10.0 -stack_size,0x4000 endif ### 3.4 Debugging diff --git a/src/movepick.cpp b/src/movepick.cpp index a54398c0..643c8368 100644 --- a/src/movepick.cpp +++ b/src/movepick.cpp @@ -75,7 +75,7 @@ MovePicker::MovePicker(const Position& p, Move ttm, Depth d, const HistoryStats& assert(d > DEPTH_ZERO); - cur = end = moves = pos.this_thread()->get_moves_array(); + cur = end = moves; endBadCaptures = moves + MAX_MOVES - 1; countermoves = cm; ss = s; @@ -91,11 +91,10 @@ MovePicker::MovePicker(const Position& p, Move ttm, Depth d, const HistoryStats& } MovePicker::MovePicker(const Position& p, Move ttm, Depth d, const HistoryStats& h, - Square sq) : pos(p), history(h) { + Square sq) : pos(p), history(h), cur(moves), end(moves) { assert(d <= DEPTH_ZERO); - cur = end = moves = pos.this_thread()->get_moves_array(); if (p.checkers()) stage = EVASION; @@ -124,11 +123,10 @@ MovePicker::MovePicker(const Position& p, Move ttm, Depth d, const HistoryStats& } MovePicker::MovePicker(const Position& p, Move ttm, const HistoryStats& h, PieceType pt) - : pos(p), history(h) { + : pos(p), history(h), cur(moves), end(moves) { assert(!pos.checkers()); - cur = end = moves = pos.this_thread()->get_moves_array(); stage = PROBCUT; // In ProbCut we generate only captures better than parent's captured piece @@ -141,7 +139,6 @@ MovePicker::MovePicker(const Position& p, Move ttm, const HistoryStats& h, Piece end += (ttMove != MOVE_NONE); } -MovePicker::~MovePicker() { pos.this_thread()->free_moves_array(); } /// score() assign a numerical move ordering score to each move in a move list. /// The moves with highest scores will be picked first. diff --git a/src/movepick.h b/src/movepick.h index f3839bf0..c444615f 100644 --- a/src/movepick.h +++ b/src/movepick.h @@ -87,7 +87,6 @@ public: MovePicker(const Position&, Move, Depth, const HistoryStats&, Square); MovePicker(const Position&, Move, const HistoryStats&, PieceType); MovePicker(const Position&, Move, Depth, const HistoryStats&, Move*, Search::Stack*); - ~MovePicker(); template Move next_move(); @@ -104,7 +103,8 @@ private: ExtMove killers[4]; Square recaptureSquare; int captureThreshold, stage; - ExtMove *moves, *cur, *end, *endQuiets, *endBadCaptures; + ExtMove *cur, *end, *endQuiets, *endBadCaptures; + ExtMove moves[MAX_MOVES]; }; #endif // #ifndef MOVEPICK_H_INCLUDED diff --git a/src/thread.cpp b/src/thread.cpp index c385f05e..7d85db86 100644 --- a/src/thread.cpp +++ b/src/thread.cpp @@ -83,11 +83,10 @@ void ThreadBase::wait_for(volatile const bool& b) { Thread::Thread() /* : splitPoints() */ { // Value-initialization bug in MSVC searching = false; - maxPly = splitPointsSize = curPage = 0; + maxPly = splitPointsSize = 0; activeSplitPoint = NULL; activePosition = NULL; idx = Threads.size(); - movePages.resize(MAX_PLY_PLUS_6 * MAX_MOVES); } diff --git a/src/thread.h b/src/thread.h index 64548267..56d000f3 100644 --- a/src/thread.h +++ b/src/thread.h @@ -115,8 +115,6 @@ struct Thread : public ThreadBase { virtual void idle_loop(); bool cutoff_occurred() const; bool is_available_to(const Thread* master) const; - ExtMove* get_moves_array() { return &movePages[curPage += MAX_MOVES]; } - void free_moves_array() { curPage -= MAX_MOVES; } template void split(Position& pos, const Search::Stack* ss, Value alpha, Value beta, Value* bestValue, Move* bestMove, @@ -127,8 +125,6 @@ struct Thread : public ThreadBase { Endgames endgames; Pawns::Table pawnsTable; Position* activePosition; - std::vector movePages; - int curPage; size_t idx; int maxPly; SplitPoint* volatile activeSplitPoint;