mirror of
https://github.com/sockspls/badfish
synced 2025-04-30 00:33: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());
|
read_evaluation_uci_options(pos.side_to_move());
|
||||||
Threads.read_uci_options();
|
Threads.read_uci_options();
|
||||||
|
|
||||||
// Allocate pawn and material hash tables if number of active threads
|
// Set a new TT size if changed
|
||||||
// increased and set a new TT size if changed.
|
|
||||||
Threads.init_hash_tables();
|
|
||||||
TT.set_size(Options["Hash"].value<int>());
|
TT.set_size(Options["Hash"].value<int>());
|
||||||
|
|
||||||
if (Options["Clear Hash"].value<bool>())
|
if (Options["Clear Hash"].value<bool>())
|
||||||
|
|
|
@ -27,7 +27,7 @@ ThreadsManager Threads; // Global object definition
|
||||||
namespace { extern "C" {
|
namespace { extern "C" {
|
||||||
|
|
||||||
// start_routine() is the C function which is called when a new thread
|
// 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
|
// There are two versions of this function; one for POSIX threads and
|
||||||
// one for Windows threads.
|
// one for Windows threads.
|
||||||
|
|
||||||
|
@ -126,7 +126,20 @@ void ThreadsManager::set_size(int cnt) {
|
||||||
activeThreads = cnt;
|
activeThreads = cnt;
|
||||||
|
|
||||||
for (int i = 0; i < MAX_THREADS; i++)
|
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].state = Thread::SEARCHING;
|
||||||
threads[0].threadID = 0;
|
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
|
// Initialize threads lock, used when allocating slaves during splitting
|
||||||
lock_init(&threadsLock);
|
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
|
// available_slave_exists() tries to find an idle thread which is available as
|
||||||
// a slave for the thread with threadID "master".
|
// a slave for the thread with threadID "master".
|
||||||
|
|
||||||
|
|
|
@ -111,7 +111,6 @@ public:
|
||||||
Thread& operator[](int threadID) { return threads[threadID]; }
|
Thread& operator[](int threadID) { return threads[threadID]; }
|
||||||
void init();
|
void init();
|
||||||
void exit();
|
void exit();
|
||||||
void init_hash_tables();
|
|
||||||
|
|
||||||
bool use_sleeping_threads() const { return useSleepingThreads; }
|
bool use_sleeping_threads() const { return useSleepingThreads; }
|
||||||
int min_split_depth() const { return minimumSplitDepth; }
|
int min_split_depth() const { return minimumSplitDepth; }
|
||||||
|
|
Loading…
Add table
Reference in a new issue