Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJagannadhan Ravi <easythrees>2022-01-07 13:31:02 +0300
committerSergey Sharybin <sergey@blender.org>2022-01-07 13:37:30 +0300
commit361702f239528803260ba966d4174b8601e90a53 (patch)
treea8789c30ce98bf1d364d2757d880020df212987e
parentbef2412ca253a9d3d63fc713e03997104d350f50 (diff)
Fix T94310: Blender doesn't support with 128 threads well in Win11
Query TBB for the maximum allowed concurrency, which is free from a bug in own concurrency detection code. One thing to keep in mind is that now Cycles is limited by the number of threads in the TBB areana from which Session is created. This isn't a problem for Blender since we do not limit arena on Blender side. Could be something to watch out for in other Cycles integrations. Differential Revision: https://developer.blender.org/D13658
-rw-r--r--intern/cycles/device/device.cpp3
-rw-r--r--intern/cycles/util/task.cpp2
2 files changed, 3 insertions, 2 deletions
diff --git a/intern/cycles/device/device.cpp b/intern/cycles/device/device.cpp
index 2b067d57158..d3de6c54a17 100644
--- a/intern/cycles/device/device.cpp
+++ b/intern/cycles/device/device.cpp
@@ -37,6 +37,7 @@
#include "util/math.h"
#include "util/string.h"
#include "util/system.h"
+#include "util/task.h"
#include "util/time.h"
#include "util/types.h"
#include "util/vector.h"
@@ -333,7 +334,7 @@ DeviceInfo Device::get_multi_device(const vector<DeviceInfo> &subdevices,
/* Ensure CPU device does not slow down GPU. */
if (device.type == DEVICE_CPU && subdevices.size() > 1) {
if (background) {
- int orig_cpu_threads = (threads) ? threads : system_cpu_thread_count();
+ int orig_cpu_threads = (threads) ? threads : TaskScheduler::num_threads();
int cpu_threads = max(orig_cpu_threads - (subdevices.size() - 1), 0);
VLOG(1) << "CPU render threads reduced from " << orig_cpu_threads << " to " << cpu_threads
diff --git a/intern/cycles/util/task.cpp b/intern/cycles/util/task.cpp
index ce61bf8d6c4..eeccbaf1c44 100644
--- a/intern/cycles/util/task.cpp
+++ b/intern/cycles/util/task.cpp
@@ -89,7 +89,7 @@ void TaskScheduler::init(int num_threads)
active_num_threads = num_threads;
}
else {
- active_num_threads = system_cpu_thread_count();
+ active_num_threads = tbb::this_task_arena::max_concurrency();
}
}