1
1

Fix Cycles CPU + GPU render not using CPU after recent changes

In some places the task scheduler was not initialized in time.
This commit is contained in:
2022-01-12 23:40:05 +01:00
parent eaa4cdaa42
commit a3deef6fff
4 changed files with 8 additions and 8 deletions

View File

@@ -72,7 +72,7 @@ CPUDevice::CPUDevice(const DeviceInfo &info_, Stats &stats_, Profiler &profiler_
<< " CPU kernels.";
if (info.cpu_threads == 0) {
info.cpu_threads = TaskScheduler::num_threads();
info.cpu_threads = TaskScheduler::max_concurrency();
}
#ifdef WITH_OSL

View File

@@ -334,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 : TaskScheduler::num_threads();
int orig_cpu_threads = (threads) ? threads : TaskScheduler::max_concurrency();
int cpu_threads = max(orig_cpu_threads - (subdevices.size() - 1), 0);
VLOG(1) << "CPU render threads reduced from " << orig_cpu_threads << " to " << cpu_threads

View File

@@ -109,9 +109,10 @@ void TaskScheduler::free_memory()
assert(users == 0);
}
int TaskScheduler::num_threads()
int TaskScheduler::max_concurrency()
{
return active_num_threads;
thread_scoped_lock lock(mutex);
return (users > 0) ? active_num_threads : tbb::this_task_arena::max_concurrency();
}
/* Dedicated Task Pool */

View File

@@ -86,10 +86,9 @@ class TaskScheduler {
static void exit();
static void free_memory();
/* Approximate number of threads that will work on task, which may be lower
* or higher than the actual number of threads. Use as little as possible and
* leave splitting up tasks to the scheduler. */
static int num_threads();
/* Maximum number of threads that will work on task. Use as little as
* possible and leave scheduling and splitting up tasks to the scheduler. */
static int max_concurrency();
protected:
static thread_mutex mutex;