1
0
Fork 0
mirror of https://github.com/sockspls/badfish synced 2025-07-11 19:49:14 +00:00

Revert "Use a per-thread array"

This reverts commit 800410eef1 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 0049d3f337.

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.
This commit is contained in:
Marco Costalba 2013-09-28 09:59:45 +02:00
parent bc6faf633e
commit c65d67feb5
5 changed files with 7 additions and 15 deletions

View file

@ -273,7 +273,7 @@ ifneq ($(comp),mingw)
endif endif
ifeq ($(os),osx) ifeq ($(os),osx)
LDFLAGS += -arch $(arch) -mmacosx-version-min=10.0 LDFLAGS += -arch $(arch) -mmacosx-version-min=10.0 -stack_size,0x4000
endif endif
### 3.4 Debugging ### 3.4 Debugging

View file

@ -75,7 +75,7 @@ MovePicker::MovePicker(const Position& p, Move ttm, Depth d, const HistoryStats&
assert(d > DEPTH_ZERO); assert(d > DEPTH_ZERO);
cur = end = moves = pos.this_thread()->get_moves_array(); cur = end = moves;
endBadCaptures = moves + MAX_MOVES - 1; endBadCaptures = moves + MAX_MOVES - 1;
countermoves = cm; countermoves = cm;
ss = s; 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, 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); assert(d <= DEPTH_ZERO);
cur = end = moves = pos.this_thread()->get_moves_array();
if (p.checkers()) if (p.checkers())
stage = EVASION; 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) 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()); assert(!pos.checkers());
cur = end = moves = pos.this_thread()->get_moves_array();
stage = PROBCUT; stage = PROBCUT;
// In ProbCut we generate only captures better than parent's captured piece // 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); 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. /// score() assign a numerical move ordering score to each move in a move list.
/// The moves with highest scores will be picked first. /// The moves with highest scores will be picked first.

View file

@ -87,7 +87,6 @@ public:
MovePicker(const Position&, Move, Depth, const HistoryStats&, Square); MovePicker(const Position&, Move, Depth, const HistoryStats&, Square);
MovePicker(const Position&, Move, const HistoryStats&, PieceType); MovePicker(const Position&, Move, const HistoryStats&, PieceType);
MovePicker(const Position&, Move, Depth, const HistoryStats&, Move*, Search::Stack*); MovePicker(const Position&, Move, Depth, const HistoryStats&, Move*, Search::Stack*);
~MovePicker();
template<bool SpNode> Move next_move(); template<bool SpNode> Move next_move();
@ -104,7 +103,8 @@ private:
ExtMove killers[4]; ExtMove killers[4];
Square recaptureSquare; Square recaptureSquare;
int captureThreshold, stage; int captureThreshold, stage;
ExtMove *moves, *cur, *end, *endQuiets, *endBadCaptures; ExtMove *cur, *end, *endQuiets, *endBadCaptures;
ExtMove moves[MAX_MOVES];
}; };
#endif // #ifndef MOVEPICK_H_INCLUDED #endif // #ifndef MOVEPICK_H_INCLUDED

View file

@ -83,11 +83,10 @@ void ThreadBase::wait_for(volatile const bool& b) {
Thread::Thread() /* : splitPoints() */ { // Value-initialization bug in MSVC Thread::Thread() /* : splitPoints() */ { // Value-initialization bug in MSVC
searching = false; searching = false;
maxPly = splitPointsSize = curPage = 0; maxPly = splitPointsSize = 0;
activeSplitPoint = NULL; activeSplitPoint = NULL;
activePosition = NULL; activePosition = NULL;
idx = Threads.size(); idx = Threads.size();
movePages.resize(MAX_PLY_PLUS_6 * MAX_MOVES);
} }

View file

@ -115,8 +115,6 @@ struct Thread : public ThreadBase {
virtual void idle_loop(); virtual void idle_loop();
bool cutoff_occurred() const; bool cutoff_occurred() const;
bool is_available_to(const Thread* master) 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> template <bool Fake>
void split(Position& pos, const Search::Stack* ss, Value alpha, Value beta, Value* bestValue, Move* bestMove, 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; Endgames endgames;
Pawns::Table pawnsTable; Pawns::Table pawnsTable;
Position* activePosition; Position* activePosition;
std::vector<ExtMove> movePages;
int curPage;
size_t idx; size_t idx;
int maxPly; int maxPly;
SplitPoint* volatile activeSplitPoint; SplitPoint* volatile activeSplitPoint;