mirror of
https://github.com/sockspls/badfish
synced 2025-04-29 16:23:09 +00:00
Retire ThreadsManager::init_hash_tables()
Allocation of pawn and material hash tables should be strictly bounded to the change of the number of activeThreads, so move the code inside set_size(). No functional change. Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
parent
86b95f2105
commit
e5ffe9959c
3 changed files with 16 additions and 25 deletions
|
@ -409,9 +409,7 @@ bool think(Position& pos, const SearchLimits& limits, Move searchMoves[]) {
|
|||
read_evaluation_uci_options(pos.side_to_move());
|
||||
Threads.read_uci_options();
|
||||
|
||||
// Allocate pawn and material hash tables if number of active threads
|
||||
// increased and set a new TT size if changed.
|
||||
Threads.init_hash_tables();
|
||||
// Set a new TT size if changed
|
||||
TT.set_size(Options["Hash"].value<int>());
|
||||
|
||||
if (Options["Clear Hash"].value<bool>())
|
||||
|
|
|
@ -27,7 +27,7 @@ ThreadsManager Threads; // Global object definition
|
|||
namespace { extern "C" {
|
||||
|
||||
// start_routine() is the C function which is called when a new thread
|
||||
// is launched. It simply calls idle_loop() with the supplied threadID.
|
||||
// is launched. It simply calls idle_loop() of the supplied threadID.
|
||||
// There are two versions of this function; one for POSIX threads and
|
||||
// one for Windows threads.
|
||||
|
||||
|
@ -126,7 +126,20 @@ void ThreadsManager::set_size(int cnt) {
|
|||
activeThreads = cnt;
|
||||
|
||||
for (int i = 0; i < MAX_THREADS; i++)
|
||||
threads[i].do_sleep = !(i < activeThreads);
|
||||
if (i < activeThreads)
|
||||
{
|
||||
// Dynamically allocate pawn and material hash tables according to the
|
||||
// number of active threads. This avoids preallocating memory for all
|
||||
// possible threads if only few are used as, for instance, on mobile
|
||||
// devices where memory is scarce and allocating for MAX_THREADS could
|
||||
// even result in a crash.
|
||||
threads[i].pawnTable.init();
|
||||
threads[i].materialTable.init();
|
||||
|
||||
threads[i].do_sleep = false;
|
||||
}
|
||||
else
|
||||
threads[i].do_sleep = true;
|
||||
}
|
||||
|
||||
|
||||
|
@ -140,9 +153,6 @@ void ThreadsManager::init() {
|
|||
threads[0].state = Thread::SEARCHING;
|
||||
threads[0].threadID = 0;
|
||||
|
||||
// Allocate pawn and material hash tables for main thread
|
||||
init_hash_tables();
|
||||
|
||||
// Initialize threads lock, used when allocating slaves during splitting
|
||||
lock_init(&threadsLock);
|
||||
|
||||
|
@ -211,22 +221,6 @@ void ThreadsManager::exit() {
|
|||
}
|
||||
|
||||
|
||||
// init_hash_tables() dynamically allocates pawn and material hash tables
|
||||
// according to the number of active threads. This avoids preallocating
|
||||
// memory for all possible threads if only few are used as, for instance,
|
||||
// on mobile devices where memory is scarce and allocating for MAX_THREADS
|
||||
// threads could even result in a crash.
|
||||
|
||||
void ThreadsManager::init_hash_tables() {
|
||||
|
||||
for (int i = 0; i < activeThreads; i++)
|
||||
{
|
||||
threads[i].pawnTable.init();
|
||||
threads[i].materialTable.init();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// available_slave_exists() tries to find an idle thread which is available as
|
||||
// a slave for the thread with threadID "master".
|
||||
|
||||
|
|
|
@ -111,7 +111,6 @@ public:
|
|||
Thread& operator[](int threadID) { return threads[threadID]; }
|
||||
void init();
|
||||
void exit();
|
||||
void init_hash_tables();
|
||||
|
||||
bool use_sleeping_threads() const { return useSleepingThreads; }
|
||||
int min_split_depth() const { return minimumSplitDepth; }
|
||||
|
|
Loading…
Add table
Reference in a new issue