[Bf-blender-cvs] [949ab753bb2] blender2.7: Cycles OpenCL: Remove OpenCL MegaKernel

Jeroen Bakker noreply at git.blender.org
Wed Feb 20 15:17:56 CET 2019


Commit: 949ab753bb2e2d0f76921ed6d716f074ce863f21
Author: Jeroen Bakker
Date:   Wed Feb 20 14:41:56 2019 +0100
Branches: blender2.7
https://developer.blender.org/rB949ab753bb2e2d0f76921ed6d716f074ce863f21

Cycles OpenCL: Remove OpenCL MegaKernel

Using OpenCL MegaKernel has been slow and therefore not usefull.
This patch will remove the mega kernel from the OpenCL codebase
and the OpenCLDeviceBase class.

T61736: removal of mega kernel
T61703: baking does not work with mega kernel

Tags: #cycles

Differential Revision: https://developer.blender.org/D4383

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

M	intern/cycles/blender/addon/ui.py
M	intern/cycles/blender/blender_python.cpp
M	intern/cycles/device/CMakeLists.txt
M	intern/cycles/device/device_opencl.cpp
M	intern/cycles/device/opencl/memory_manager.cpp
M	intern/cycles/device/opencl/memory_manager.h
M	intern/cycles/device/opencl/opencl.h
D	intern/cycles/device/opencl/opencl_base.cpp
D	intern/cycles/device/opencl/opencl_mega.cpp
M	intern/cycles/device/opencl/opencl_split.cpp
M	intern/cycles/device/opencl/opencl_util.cpp
M	intern/cycles/kernel/CMakeLists.txt
R056	intern/cycles/kernel/kernels/opencl/kernel.cl	intern/cycles/kernel/kernels/opencl/kernel_base.cl
M	intern/cycles/util/util_debug.cpp
M	intern/cycles/util/util_debug.h

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

diff --git a/intern/cycles/blender/addon/ui.py b/intern/cycles/blender/addon/ui.py
index e372843d763..5d1d9e764d0 100644
--- a/intern/cycles/blender/addon/ui.py
+++ b/intern/cycles/blender/addon/ui.py
@@ -1634,7 +1634,6 @@ class CYCLES_RENDER_PT_debug(CyclesButtonsPanel, Panel):
 
         col = layout.column()
         col.label('OpenCL Flags:')
-        col.prop(cscene, "debug_opencl_kernel_type", text="Kernel")
         col.prop(cscene, "debug_opencl_device_type", text="Device")
         col.prop(cscene, "debug_opencl_kernel_single_program", text="Single Program")
         col.prop(cscene, "debug_use_opencl_debug", text="Debug")
diff --git a/intern/cycles/blender/blender_python.cpp b/intern/cycles/blender/blender_python.cpp
index 513941b1fcc..da369d0454a 100644
--- a/intern/cycles/blender/blender_python.cpp
+++ b/intern/cycles/blender/blender_python.cpp
@@ -67,7 +67,6 @@ bool debug_flags_sync_from_scene(BL::Scene b_scene)
 	PointerRNA cscene = RNA_pointer_get(&b_scene.ptr, "cycles");
 	/* Backup some settings for comparison. */
 	DebugFlags::OpenCL::DeviceType opencl_device_type = flags.opencl.device_type;
-	DebugFlags::OpenCL::KernelType opencl_kernel_type = flags.opencl.kernel_type;
 	/* Synchronize shared flags. */
 	flags.viewport_static_bvh = get_enum(cscene, "debug_bvh_type");
 	/* Synchronize CPU flags. */
@@ -81,18 +80,6 @@ bool debug_flags_sync_from_scene(BL::Scene b_scene)
 	/* Synchronize CUDA flags. */
 	flags.cuda.adaptive_compile = get_boolean(cscene, "debug_use_cuda_adaptive_compile");
 	flags.cuda.split_kernel = get_boolean(cscene, "debug_use_cuda_split_kernel");
-	/* Synchronize OpenCL kernel type. */
-	switch(get_enum(cscene, "debug_opencl_kernel_type")) {
-		case 0:
-			flags.opencl.kernel_type = DebugFlags::OpenCL::KERNEL_DEFAULT;
-			break;
-		case 1:
-			flags.opencl.kernel_type = DebugFlags::OpenCL::KERNEL_MEGA;
-			break;
-		case 2:
-			flags.opencl.kernel_type = DebugFlags::OpenCL::KERNEL_SPLIT;
-			break;
-	}
 	/* Synchronize OpenCL device type. */
 	switch(get_enum(cscene, "debug_opencl_device_type")) {
 		case 0:
@@ -118,8 +105,7 @@ bool debug_flags_sync_from_scene(BL::Scene b_scene)
 	flags.opencl.debug = get_boolean(cscene, "debug_use_opencl_debug");
 	flags.opencl.mem_limit = ((size_t)get_int(cscene, "debug_opencl_mem_limit"))*1024*1024;
 	flags.opencl.single_program = get_boolean(cscene, "debug_opencl_kernel_single_program");
-	return flags.opencl.device_type != opencl_device_type ||
-	       flags.opencl.kernel_type != opencl_kernel_type;
+	return flags.opencl.device_type != opencl_device_type;
 }
 
 /* Reset debug flags to default values.
@@ -130,10 +116,8 @@ bool debug_flags_reset()
 	DebugFlagsRef flags = DebugFlags();
 	/* Backup some settings for comparison. */
 	DebugFlags::OpenCL::DeviceType opencl_device_type = flags.opencl.device_type;
-	DebugFlags::OpenCL::KernelType opencl_kernel_type = flags.opencl.kernel_type;
 	flags.reset();
-	return flags.opencl.device_type != opencl_device_type ||
-	       flags.opencl.kernel_type != opencl_kernel_type;
+	return flags.opencl.device_type != opencl_device_type;
 }
 
 }  /* namespace */
diff --git a/intern/cycles/device/CMakeLists.txt b/intern/cycles/device/CMakeLists.txt
index 75e78e038ea..d95cd02a85e 100644
--- a/intern/cycles/device/CMakeLists.txt
+++ b/intern/cycles/device/CMakeLists.txt
@@ -37,8 +37,6 @@ set(SRC_OPENCL
 	opencl/opencl.h
 	opencl/memory_manager.h
 
-	opencl/opencl_base.cpp
-	opencl/opencl_mega.cpp
 	opencl/opencl_split.cpp
 	opencl/opencl_util.cpp
 	opencl/memory_manager.cpp
diff --git a/intern/cycles/device/device_opencl.cpp b/intern/cycles/device/device_opencl.cpp
index 1e8c6b2dd0e..948fe407f63 100644
--- a/intern/cycles/device/device_opencl.cpp
+++ b/intern/cycles/device/device_opencl.cpp
@@ -29,19 +29,7 @@ CCL_NAMESPACE_BEGIN
 
 Device *device_opencl_create(DeviceInfo& info, Stats &stats, Profiler &profiler, bool background)
 {
-	vector<OpenCLPlatformDevice> usable_devices;
-	OpenCLInfo::get_usable_devices(&usable_devices);
-	assert(info.num < usable_devices.size());
-	const OpenCLPlatformDevice& platform_device = usable_devices[info.num];
-	const string& platform_name = platform_device.platform_name;
-	const cl_device_type device_type = platform_device.device_type;
-	if(OpenCLInfo::kernel_use_split(platform_name, device_type)) {
-		VLOG(1) << "Using split kernel.";
-		return opencl_create_split_device(info, stats, profiler, background);
-	} else {
-		VLOG(1) << "Using mega kernel.";
-		return opencl_create_mega_device(info, stats, profiler, background);
-	}
+	return opencl_create_split_device(info, stats, profiler, background);
 }
 
 bool device_opencl_init()
@@ -111,7 +99,6 @@ void device_opencl_info(vector<DeviceInfo>& devices)
 	foreach(OpenCLPlatformDevice& platform_device, usable_devices) {
 		/* Compute unique ID for persistent user preferences. */
 		const string& platform_name = platform_device.platform_name;
-		const cl_device_type device_type = platform_device.device_type;
 		const string& device_name = platform_device.device_name;
 		string hardware_id = platform_device.hardware_id;
 		if(hardware_id == "") {
@@ -133,8 +120,7 @@ void device_opencl_info(vector<DeviceInfo>& devices)
 		/* We don't know if it's used for display, but assume it is. */
 		info.display_device = true;
 		info.advanced_shading = OpenCLInfo::kernel_use_advanced_shading(platform_name);
-		info.use_split_kernel = OpenCLInfo::kernel_use_split(platform_name,
-		                                                     device_type);
+		info.use_split_kernel = true;
 		info.has_volume_decoupled = false;
 		info.id = id;
 
diff --git a/intern/cycles/device/opencl/memory_manager.cpp b/intern/cycles/device/opencl/memory_manager.cpp
index 485a656cb83..9cb105982aa 100644
--- a/intern/cycles/device/opencl/memory_manager.cpp
+++ b/intern/cycles/device/opencl/memory_manager.cpp
@@ -28,7 +28,7 @@ void MemoryManager::DeviceBuffer::add_allocation(Allocation& allocation)
 	allocations.push_back(&allocation);
 }
 
-void MemoryManager::DeviceBuffer::update_device_memory(OpenCLDeviceBase *device)
+void MemoryManager::DeviceBuffer::update_device_memory(OpenCLDevice *device)
 {
 	bool need_realloc = false;
 
@@ -142,7 +142,7 @@ void MemoryManager::DeviceBuffer::update_device_memory(OpenCLDeviceBase *device)
 	clFinish(device->cqCommandQueue);
 }
 
-void MemoryManager::DeviceBuffer::free(OpenCLDeviceBase *)
+void MemoryManager::DeviceBuffer::free(OpenCLDevice *)
 {
 	buffer->free();
 }
@@ -160,7 +160,7 @@ MemoryManager::DeviceBuffer* MemoryManager::smallest_device_buffer()
 	return smallest;
 }
 
-MemoryManager::MemoryManager(OpenCLDeviceBase *device)
+MemoryManager::MemoryManager(OpenCLDevice *device)
 : device(device), need_update(false)
 {
 	foreach(DeviceBuffer& device_buffer, device_buffers) {
diff --git a/intern/cycles/device/opencl/memory_manager.h b/intern/cycles/device/opencl/memory_manager.h
index b49bd32dab6..8fcc4440369 100644
--- a/intern/cycles/device/opencl/memory_manager.h
+++ b/intern/cycles/device/opencl/memory_manager.h
@@ -26,7 +26,7 @@
 
 CCL_NAMESPACE_BEGIN
 
-class OpenCLDeviceBase;
+class OpenCLDevice;
 
 class MemoryManager {
 public:
@@ -73,12 +73,12 @@ private:
 
 		void add_allocation(Allocation& allocation);
 
-		void update_device_memory(OpenCLDeviceBase *device);
+		void update_device_memory(OpenCLDevice *device);
 
-		void free(OpenCLDeviceBase *device);
+		void free(OpenCLDevice *device);
 	};
 
-	OpenCLDeviceBase *device;
+	OpenCLDevice *device;
 
 	DeviceBuffer device_buffers[NUM_DEVICE_BUFFERS];
 
@@ -90,7 +90,7 @@ private:
 	DeviceBuffer* smallest_device_buffer();
 
 public:
-	MemoryManager(OpenCLDeviceBase *device);
+	MemoryManager(OpenCLDevice *device);
 
 	void free(); /* Free all memory. */
 
diff --git a/intern/cycles/device/opencl/opencl.h b/intern/cycles/device/opencl/opencl.h
index 766b9e4bf1a..1c5f6d375ec 100644
--- a/intern/cycles/device/opencl/opencl.h
+++ b/intern/cycles/device/opencl/opencl.h
@@ -18,6 +18,7 @@
 
 #include "device/device.h"
 #include "device/device_denoising.h"
+#include "device/device_split_kernel.h"
 
 #include "util/util_map.h"
 #include "util/util_param.h"
@@ -84,8 +85,6 @@ public:
 	static cl_device_type device_type();
 	static bool use_debug();
 	static bool kernel_use_advanced_shading(const string& platform_name);
-	static bool kernel_use_split(const string& platform_name,
-	                             const cl_device_type device_type);
 	static bool device_supported(const string& platform_name,
 	                             const cl_device_id device_id);
 	static bool platform_version_check(cl_platform_id platform,
@@ -259,7 +258,7 @@ public:
 		} \
 	} (void) 0
 
-class OpenCLDeviceBase : public Device
+class OpenCLDevice : public Device
 {
 public:
 	DedicatedTaskPool task_pool;
@@ -273,7 +272,7 @@ public:
 	class OpenCLProgram {
 	public:
 		OpenCLProgram() : loaded(false), program(NULL), device(NULL) {}
-		OpenCLProgram(OpenCLDeviceBase *device,
+		OpenCLProgram(OpenCLDevice *device,
 		              const string& program_name,
 		              const string& kernel_name,
 		              const string& kernel_build_options,
@@ -311,7 +310,7 @@ public:
 
 		bool loaded;
 		cl_program program;
-		OpenCLDeviceBase *device;
+		OpenCLDevice *device;
 
 		/* Used for the OpenCLCache key. */
 		string program_name;
@@ -325,6 +324,32 @@ public:
 		map<ustring, cl_kernel> kernels;
 	};
 
+	DeviceSplitKernel *split_kernel;
+
+	OpenCLProgram program_data_init;
+	OpenCLProgram program_state_buffer_size;
+
+	OpenCLProgram program_split;
+
+	OpenCLProgram program_path_init;
+	OpenCLProgram program_scene_intersect;
+	OpenCLProgram program_lamp_emission;
+	OpenCLProgram program_do_volume;
+	OpenCLProgram program_queue_enqueue;
+	OpenCLProgram program_indirect_background;
+	OpenCLProgram program_shader_setup;
+	OpenCLProgram program_shader_sort;
+	OpenCLProgram program_shader_eval;
+	OpenCLProgram program_holdout_emission_blurring_pathtermination_ao;
+	OpenCLProgram program_subsurface_scatter;
+	OpenCLProgram program_direct_lighting;
+	OpenCLProgram program_shadow_blocked_ao;
+	OpenCLProgram program_shadow_blocked_dl;
+	OpenCLProgram program_enqueue_inactive;
+	OpenCLProgram program_next_iteration_setup;
+	OpenCLProgram

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list