Revert "Use a per-thread array"
authorMarco Costalba <mcostalba@gmail.com>
Sat, 28 Sep 2013 07:59:45 +0000 (09:59 +0200)
committerMarco Costalba <mcostalba@gmail.com>
Sat, 28 Sep 2013 08:10:51 +0000 (10:10 +0200)
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.

src/Makefile
src/movepick.cpp
src/movepick.h
src/thread.cpp
src/thread.h

index 1f9f27dae570c61c55191a57df59dcee85f914be..fd5290be53b24abbe2c2dfd05aee5f572e76f5d4 100644 (file)
@@ -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
index a54398c0844726394fe4cc4cc32e3ba8222f54a0..643c8368ca4cf1c28cbf4baa447aa88b5eb0248e 100644 (file)
@@ -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.
index f3839bf024d9e03a81db31cb93dadf8e475f7ca9..c444615f5b9f2e8ab4a0952ff47e3c97bf642079 100644 (file)
@@ -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<bool SpNode> 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
index c385f05ef2fcc6f291f83283c1ffb04aa7710d26..7d85db8618ca982059b96466d963e29d3b1b5ba7 100644 (file)
@@ -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);
 }
 
 
index 645482673ba1b93fbc1dfe9449b329aee0abf049..56d000f3f94438275a83c88eb06ad7c2582fd921 100644 (file)
@@ -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 <bool Fake>
   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<ExtMove> movePages;
-  int curPage;
   size_t idx;
   int maxPly;
   SplitPoint* volatile activeSplitPoint;