From 1d595604097d1777dcb23d45abdb9f7f6b0d0374 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Rydg=C3=A5rd?= Date: Sun, 13 Jun 2021 00:05:18 +0200 Subject: [PATCH] Make use of hyperthreading for worker threads. Still cap to 16 workers. --- Common/Thread/ThreadManager.cpp | 6 ++++-- Common/Thread/ThreadManager.h | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/Common/Thread/ThreadManager.cpp b/Common/Thread/ThreadManager.cpp index 8787e79eb8..0b2fd94f8d 100644 --- a/Common/Thread/ThreadManager.cpp +++ b/Common/Thread/ThreadManager.cpp @@ -97,15 +97,17 @@ static void WorkerThreadFunc(GlobalThreadContext *global, ThreadContext *thread) } } -void ThreadManager::Init(int numRealCores, int numLogicalCores) { +void ThreadManager::Init(int numRealCores, int numLogicalCoresPerCpu) { if (!global_->threads_.empty()) { Teardown(); } - numComputeThreads_ = std::min(numRealCores, MAX_CORES_TO_USE); + numComputeThreads_ = std::min(numRealCores * numLogicalCoresPerCpu, MAX_CORES_TO_USE); int numThreads = numComputeThreads_ + EXTRA_THREADS; numThreads_ = numThreads; + INFO_LOG(SYSTEM, "ThreadManager::Init(compute threads: %d, all: %d)", numComputeThreads_, numThreads_); + for (int i = 0; i < numThreads; i++) { ThreadContext *thread = new ThreadContext(); thread->cancelled.store(false); diff --git a/Common/Thread/ThreadManager.h b/Common/Thread/ThreadManager.h index 3908d95abf..0201d8b954 100644 --- a/Common/Thread/ThreadManager.h +++ b/Common/Thread/ThreadManager.h @@ -44,7 +44,7 @@ public: // The distinction here is to be able to take hyper-threading into account. // It gets even trickier when you think about mobile chips with BIG/LITTLE, but we'll // just ignore it and let the OS handle it. - void Init(int numRealCores, int numLogicalCores); + void Init(int numCores, int numLogicalCoresPerCpu); void EnqueueTask(Task *task, TaskType taskType); void EnqueueTaskOnThread(int threadNum, Task *task, TaskType taskType);