[Bf-blender-cvs] [8e49b9b06e] cycles_split_kernel: Cycles: Add split_kernel_global_size function

Mai Lavelle noreply at git.blender.org
Tue Jan 24 13:33:50 CET 2017


Commit: 8e49b9b06e3bf739850f700af476b735351e3fad
Author: Mai Lavelle
Date:   Tue Jan 24 06:56:02 2017 -0500
Branches: cycles_split_kernel
https://developer.blender.org/rB8e49b9b06e3bf739850f700af476b735351e3fad

Cycles: Add split_kernel_global_size function

This is to allow devices to suggest a good global work size. Only
implemented for OpenCL devices right now.

===================================================================

M	intern/cycles/device/device.h
M	intern/cycles/device/opencl/opencl_split.cpp

===================================================================

diff --git a/intern/cycles/device/device.h b/intern/cycles/device/device.h
index 13b7c08f50..dd176c7577 100644
--- a/intern/cycles/device/device.h
+++ b/intern/cycles/device/device.h
@@ -33,6 +33,7 @@ CCL_NAMESPACE_BEGIN
 
 class Progress;
 class RenderTile;
+class DeviceSplitKernel;
 
 /* Device Types */
 
@@ -330,6 +331,12 @@ private:
 		return make_int2(0, 0);
 	}
 
+	virtual int2 split_kernel_global_size(DeviceTask */*task*/, DeviceSplitKernel& /*split_kernel*/)
+	{
+		assert(!"not implemented for this device");
+		return make_int2(64, 64);
+	}
+
 	friend class DeviceSplitKernel;
 
 public:
diff --git a/intern/cycles/device/opencl/opencl_split.cpp b/intern/cycles/device/opencl/opencl_split.cpp
index 8d3e2598c5..cd2c3f25b5 100644
--- a/intern/cycles/device/opencl/opencl_split.cpp
+++ b/intern/cycles/device/opencl/opencl_split.cpp
@@ -259,6 +259,16 @@ public:
 		return make_int2(64, 1);
 	}
 
+	virtual int2 split_kernel_global_size(DeviceTask *task, DeviceSplitKernel& split_kernel)
+	{
+		size_t max_buffer_size;
+		clGetDeviceInfo(cdDevice, CL_DEVICE_MAX_MEM_ALLOC_SIZE, sizeof(size_t), &max_buffer_size, NULL);
+
+		size_t num_elements = split_kernel.max_elements_for_max_buffer_size(max_buffer_size / 2, task->passes_size);
+
+		return make_int2(round_up((int)sqrt(num_elements), 64), (int)sqrt(num_elements));
+	}
+
 	void thread_run(DeviceTask *task)
 	{
 		if(task->type == DeviceTask::FILM_CONVERT) {




More information about the Bf-blender-cvs mailing list