[Bf-blender-cvs] [4174e533c00] master: Cycles: Cache split kernels in CUDA device

Sergey Sharybin noreply at git.blender.org
Tue May 2 15:07:48 CEST 2017


Commit: 4174e533c001367b0ef391b72baa5b07cb517ce8
Author: Sergey Sharybin
Date:   Tue May 2 15:02:49 2017 +0200
Branches: master
https://developer.blender.org/rB4174e533c001367b0ef391b72baa5b07cb517ce8

Cycles: Cache split kernels in CUDA device

This way we don't re-load kernels for every sample in the viewport.
Additionally, we don't risk global size changed inbetween of samples.

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

M	intern/cycles/device/device_cuda.cpp

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

diff --git a/intern/cycles/device/device_cuda.cpp b/intern/cycles/device/device_cuda.cpp
index ef283c9d455..acfb3e1d8f4 100644
--- a/intern/cycles/device/device_cuda.cpp
+++ b/intern/cycles/device/device_cuda.cpp
@@ -119,6 +119,7 @@ public:
 	int cuDevId;
 	int cuDevArchitecture;
 	bool first_error;
+	CUDASplitKernel *split_kernel;
 
 	struct PixelMem {
 		GLuint cuPBO;
@@ -221,6 +222,8 @@ public:
 		cuDevice = 0;
 		cuContext = 0;
 
+		split_kernel = NULL;
+
 		need_bindless_mapping = false;
 
 		/* intialize */
@@ -260,6 +263,8 @@ public:
 	{
 		task_pool.stop();
 
+		delete split_kernel;
+
 		if(info.has_bindless_textures) {
 			tex_free(bindless_mapping);
 		}
@@ -1336,12 +1341,14 @@ public:
 					requested_features.max_closure = 64;
 				}
 
-				CUDASplitKernel split_kernel(this);
-				split_kernel.load_kernels(requested_features);
+				if(split_kernel == NULL) {
+					split_kernel = new CUDASplitKernel(this);
+					split_kernel->load_kernels(requested_features);
+				}
 
 				while(task->acquire_tile(this, tile)) {
 					device_memory void_buffer;
-					split_kernel.path_trace(task, tile, void_buffer, void_buffer);
+					split_kernel->path_trace(task, tile, void_buffer, void_buffer);
 
 					task->release_tile(tile);




More information about the Bf-blender-cvs mailing list