[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