mirror of
https://github.com/HChaZZY/Stockfish.git
synced 2025-12-19 08:36:33 +08: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:
@@ -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".
|
||||
|
||||
|
||||
Reference in New Issue
Block a user