[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