[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