[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [51986] trunk/blender/intern/cycles: Fix #33107: cycles fixed threads 1 was still having two cores do work,
Brecht Van Lommel
brechtvanlommel at pandora.be
Wed Nov 7 22:00:54 CET 2012
Revision: 51986
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=51986
Author: blendix
Date: 2012-11-07 21:00:49 +0000 (Wed, 07 Nov 2012)
Log Message:
-----------
Fix #33107: cycles fixed threads 1 was still having two cores do work,
because main thread works as well.
Modified Paths:
--------------
trunk/blender/intern/cycles/blender/blender_sync.cpp
trunk/blender/intern/cycles/device/device.cpp
trunk/blender/intern/cycles/device/device.h
trunk/blender/intern/cycles/device/device_cpu.cpp
trunk/blender/intern/cycles/device/device_intern.h
trunk/blender/intern/cycles/render/session.cpp
trunk/blender/intern/cycles/util/util_task.cpp
trunk/blender/intern/cycles/util/util_task.h
Modified: trunk/blender/intern/cycles/blender/blender_sync.cpp
===================================================================
--- trunk/blender/intern/cycles/blender/blender_sync.cpp 2012-11-07 18:11:13 UTC (rev 51985)
+++ trunk/blender/intern/cycles/blender/blender_sync.cpp 2012-11-07 21:00:49 UTC (rev 51986)
@@ -379,7 +379,10 @@
params.start_resolution = get_int(cscene, "preview_start_resolution");
/* other parameters */
- params.threads = b_scene.render().threads();
+ if(b_scene.render().threads_mode() == BL::RenderSettings::threads_mode_FIXED)
+ params.threads = b_scene.render().threads();
+ else
+ params.threads = 0;
params.cancel_timeout = get_float(cscene, "debug_cancel_timeout");
params.reset_timeout = get_float(cscene, "debug_reset_timeout");
Modified: trunk/blender/intern/cycles/device/device.cpp
===================================================================
--- trunk/blender/intern/cycles/device/device.cpp 2012-11-07 18:11:13 UTC (rev 51985)
+++ trunk/blender/intern/cycles/device/device.cpp 2012-11-07 21:00:49 UTC (rev 51986)
@@ -78,13 +78,13 @@
glDisable(GL_BLEND);
}
-Device *Device::create(DeviceInfo& info, Stats &stats, bool background, int threads)
+Device *Device::create(DeviceInfo& info, Stats &stats, bool background)
{
Device *device;
switch(info.type) {
case DEVICE_CPU:
- device = device_cpu_create(info, stats, threads);
+ device = device_cpu_create(info, stats);
break;
#ifdef WITH_CUDA
case DEVICE_CUDA:
Modified: trunk/blender/intern/cycles/device/device.h
===================================================================
--- trunk/blender/intern/cycles/device/device.h 2012-11-07 18:11:13 UTC (rev 51985)
+++ trunk/blender/intern/cycles/device/device.h 2012-11-07 21:00:49 UTC (rev 51986)
@@ -134,7 +134,7 @@
virtual int device_number(Device *sub_device) { return 0; }
/* static */
- static Device *create(DeviceInfo& info, Stats &stats, bool background = true, int threads = 0);
+ static Device *create(DeviceInfo& info, Stats &stats, bool background = true);
static DeviceType type_from_string(const char *name);
static string string_from_type(DeviceType type);
Modified: trunk/blender/intern/cycles/device/device_cpu.cpp
===================================================================
--- trunk/blender/intern/cycles/device/device_cpu.cpp 2012-11-07 18:11:13 UTC (rev 51985)
+++ trunk/blender/intern/cycles/device/device_cpu.cpp 2012-11-07 21:00:49 UTC (rev 51986)
@@ -45,7 +45,7 @@
TaskPool task_pool;
KernelGlobals *kg;
- CPUDevice(Stats &stats, int threads_num) : Device(stats)
+ CPUDevice(Stats &stats) : Device(stats)
{
kg = kernel_globals_create();
@@ -274,7 +274,7 @@
/* split task into smaller ones, more than number of threads for uneven
* workloads where some parts of the image render slower than others */
list<DeviceTask> tasks;
- task.split(tasks, TaskScheduler::num_threads()+1);
+ task.split(tasks, TaskScheduler::num_threads());
foreach(DeviceTask& task, tasks)
task_pool.push(new CPUDeviceTask(this, task));
@@ -291,9 +291,9 @@
}
};
-Device *device_cpu_create(DeviceInfo& info, Stats &stats, int threads)
+Device *device_cpu_create(DeviceInfo& info, Stats &stats)
{
- return new CPUDevice(stats, threads);
+ return new CPUDevice(stats);
}
void device_cpu_info(vector<DeviceInfo>& devices)
Modified: trunk/blender/intern/cycles/device/device_intern.h
===================================================================
--- trunk/blender/intern/cycles/device/device_intern.h 2012-11-07 18:11:13 UTC (rev 51985)
+++ trunk/blender/intern/cycles/device/device_intern.h 2012-11-07 21:00:49 UTC (rev 51986)
@@ -23,7 +23,7 @@
class Device;
-Device *device_cpu_create(DeviceInfo& info, Stats &stats, int threads);
+Device *device_cpu_create(DeviceInfo& info, Stats &stats);
Device *device_opencl_create(DeviceInfo& info, Stats &stats, bool background);
Device *device_cuda_create(DeviceInfo& info, Stats &stats, bool background);
Device *device_network_create(DeviceInfo& info, Stats &stats, const char *address);
Modified: trunk/blender/intern/cycles/render/session.cpp
===================================================================
--- trunk/blender/intern/cycles/render/session.cpp 2012-11-07 18:11:13 UTC (rev 51985)
+++ trunk/blender/intern/cycles/render/session.cpp 2012-11-07 21:00:49 UTC (rev 51986)
@@ -49,7 +49,7 @@
TaskScheduler::init(params.threads);
- device = Device::create(params.device, stats, params.background, params.threads);
+ device = Device::create(params.device, stats, params.background);
if(params.background) {
buffers = NULL;
Modified: trunk/blender/intern/cycles/util/util_task.cpp
===================================================================
--- trunk/blender/intern/cycles/util/util_task.cpp 2012-11-07 18:11:13 UTC (rev 51985)
+++ trunk/blender/intern/cycles/util/util_task.cpp 2012-11-07 21:00:49 UTC (rev 51986)
@@ -168,10 +168,16 @@
if(users == 0) {
do_exit = false;
- /* launch threads that will be waiting for work */
- if(num_threads == 0)
+ if(num_threads == 0) {
+ /* automatic number of threads will be main thread + num cores */
num_threads = system_cpu_thread_count();
+ }
+ else {
+ /* main thread will also work, for fixed threads we count it too */
+ num_threads -= 1;
+ }
+ /* launch threads that will be waiting for work */
threads.resize(num_threads);
thread_level.resize(num_threads);
Modified: trunk/blender/intern/cycles/util/util_task.h
===================================================================
--- trunk/blender/intern/cycles/util/util_task.h 2012-11-07 18:11:13 UTC (rev 51985)
+++ trunk/blender/intern/cycles/util/util_task.h 2012-11-07 21:00:49 UTC (rev 51986)
@@ -94,7 +94,10 @@
static void init(int num_threads = 0);
static void exit();
- static int num_threads() { return threads.size(); }
+ /* number of threads that can work on tasks, main thread counts too */
+ static int num_threads() { return threads.size() + 1; }
+
+ /* test if any session is using the scheduler */
static bool active() { return users != 0; }
protected:
More information about the Bf-blender-cvs
mailing list