Commit: df8a964232b64eadca03600935965d0b1c7ea668
Author: Mai Lavelle
Date:   Tue Jan 24 04:55:40 2017 -0500
Branches: cycles_split_kernel
https://developer.blender.org/rBdf8a964232b64eadca03600935965d0b1c7ea668

Cycles: Remove everything parallel samples from the split kernel

Parallel samples never actually worked, was producing incorrect results
or crashes, and wasn't any faster than work stealing, so removing it.

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

M       intern/cycles/device/device.h
M       intern/cycles/device/device_cpu.cpp
M       intern/cycles/device/device_cuda.cpp
M       intern/cycles/device/device_split_kernel.cpp
M       intern/cycles/device/opencl/opencl_split.cpp
M       intern/cycles/kernel/kernel_passes.h
M       intern/cycles/kernel/kernel_types.h
M       intern/cycles/kernel/kernel_work_stealing.h
M       intern/cycles/kernel/kernels/cpu/kernel_cpu.h
M       intern/cycles/kernel/kernels/cuda/kernel_split.cu
M       intern/cycles/kernel/kernels/opencl/kernel_data_init.cl
M       intern/cycles/kernel/split/kernel_background_buffer_update.h
M       intern/cycles/kernel/split/kernel_data_init.h
M       
intern/cycles/kernel/split/kernel_holdout_emission_blurring_pathtermination_ao.h
M       intern/cycles/kernel/split/kernel_lamp_emission.h
M       intern/cycles/kernel/split/kernel_scene_intersect.h
M       intern/cycles/kernel/split/kernel_split_data.h
M       intern/cycles/kernel/split/kernel_sum_all_radiance.h

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

diff --git a/intern/cycles/device/device.h b/intern/cycles/device/device.h
index 1564d9f3d8..13b7c08f50 100644
--- a/intern/cycles/device/device.h
+++ b/intern/cycles/device/device.h
@@ -296,7 +296,6 @@ private:
        virtual bool enqueue_split_kernel_data_init(const KernelDimensions& 
/*dim*/,
                                                    RenderTile& /*rtile*/,
                                                    int /*num_global_elements*/,
-                                                   int 
/*num_parallel_samples*/,
                                                    device_memory& 
/*kernel_globals*/,
                                                    device_memory& 
/*kernel_data*/,
                                                    device_memory& 
/*split_data*/,
diff --git a/intern/cycles/device/device_cpu.cpp 
b/intern/cycles/device/device_cpu.cpp
index 3811e43ab9..c131bea521 100644
--- a/intern/cycles/device/device_cpu.cpp
+++ b/intern/cycles/device/device_cpu.cpp
@@ -700,7 +700,6 @@ protected:
        virtual bool enqueue_split_kernel_data_init(const KernelDimensions& dim,
                                                    RenderTile& rtile,
                                                    int num_global_elements,
-                                                   int num_parallel_samples,
                                                    device_memory& 
kernel_globals,
                                                    device_memory& data,
                                                    device_memory& split_data,
@@ -724,11 +723,8 @@ protected:
                                    ccl_global int *Queue_index,
                                    int queuesize,
                                    ccl_global char *use_queues_flag,
-#ifdef __WORK_STEALING__
                                    ccl_global unsigned int *work_pool_wgs,
                                    unsigned int num_samples,
-#endif
-                                   int parallel_samples,
                                    int buffer_offset_x,
                                    int buffer_offset_y,
                                    int buffer_stride,
@@ -797,11 +793,8 @@ protected:
                                                  
(int*)queue_index.device_pointer,
                                                  dim.global_size[0] * 
dim.global_size[1],
                                                  
(char*)use_queues_flags.device_pointer,
-#ifdef __WORK_STEALING__
                                                  
(uint*)work_pool_wgs.device_pointer,
                                                  rtile.num_samples,
-#endif
-                                                 num_parallel_samples,
                                                  rtile.buffer_offset_x,
                                                  rtile.buffer_offset_y,
                                                  rtile.buffer_rng_state_stride,
diff --git a/intern/cycles/device/device_cuda.cpp 
b/intern/cycles/device/device_cuda.cpp
index 1b8b09bb07..5aaed093f3 100644
--- a/intern/cycles/device/device_cuda.cpp
+++ b/intern/cycles/device/device_cuda.cpp
@@ -1419,7 +1419,6 @@ public:
        bool enqueue_split_kernel_data_init(const KernelDimensions& dim,
                                            RenderTile& rtile,
                                            int num_global_elements,
-                                           int num_parallel_samples,
                                            device_memory& /*kernel_globals*/,
                                            device_memory& /*kernel_data*/,
                                            device_memory& split_data,
@@ -1460,12 +1459,9 @@ public:
                        int* rng_state_stride;
                        CUdeviceptr* queue_index;
                        int* queuesize;
-#ifdef __WORK_STEALING__
                        CUdeviceptr* use_queues_flag;
                        CUdeviceptr* work_pool_wgs;
-#endif
                        int* num_samples;
-                       int* parallel_samples;
                        int* buffer_offset_x;
                        int* buffer_offset_y;
                        int* buffer_stride;
@@ -1491,11 +1487,8 @@ public:
                        &d_queue_index,
                        &queue_size,
                        &d_use_queues_flag,
-#ifdef __WORK_STEALING__
                        &d_work_pool_wgs,
                        &rtile.num_samples,
-#endif
-                       &num_parallel_samples,
                        &rtile.buffer_offset_x,
                        &rtile.buffer_offset_y,
                        &rtile.buffer_rng_state_stride,
diff --git a/intern/cycles/device/device_split_kernel.cpp 
b/intern/cycles/device/device_split_kernel.cpp
index d7a0297983..484416d297 100644
--- a/intern/cycles/device/device_split_kernel.cpp
+++ b/intern/cycles/device/device_split_kernel.cpp
@@ -143,36 +143,9 @@ bool DeviceSplitKernel::path_trace(DeviceTask *task,
                }
        }
 
-       /* set global_size and num_parallel_samples */
-       size_t global_size[2];
-       unsigned int num_parallel_samples;
-       {
-#ifdef __WORK_STEALING__
-               global_size[0] = round_up(tile.w, local_size[0]);
-               global_size[1] = round_up(tile.h, local_size[1]);
-               num_parallel_samples = 1;
-#else
-               global_size[1] = round_up(tile.h, local_size[1]);
-               unsigned int num_threads = max_render_feasible_tile_size.x * 
max_render_feasible_tile_size.y;
-               unsigned int num_tile_columns_possible = num_threads / 
global_size[1];
-               /* Estimate number of parallel samples that can be
-                * processed in parallel.
-                */
-               num_parallel_samples = min(num_tile_columns_possible / tile.w, 
tile.num_samples);
-               /* Wavefront size in AMD is 64.
-                * TODO(sergey): What about other platforms?
-                */
-               if(num_parallel_samples >= 64) {
-                       /* TODO(sergey): Could use generic round-up here. */
-                       num_parallel_samples = (num_parallel_samples / 64) * 64;
-               }
-               assert(num_parallel_samples != 0);
-
-               global_size[0] = tile.w * num_parallel_samples;
-#endif  /* __WORK_STEALING__ */
-
-               assert(global_size[0] * global_size[1] <= 
max_render_feasible_tile_size.x * max_render_feasible_tile_size.y);
-       }
+       /* set global_size */
+       size_t global_size[2] = {round_up(tile.w, local_size[0]), 
round_up(tile.h, local_size[1])};
+       assert(global_size[0] * global_size[1] <= 
max_render_feasible_tile_size.x * max_render_feasible_tile_size.y);
 
        /* Number of elements in the global state buffer */
        int num_global_elements = max_render_feasible_tile_size.x * 
max_render_feasible_tile_size.y;
@@ -181,7 +154,6 @@ bool DeviceSplitKernel::path_trace(DeviceTask *task,
        if(first_tile) {
                first_tile = false;
 
-#ifdef __WORK_STEALING__
                /* Calculate max groups */
 
                /* Denotes the maximum work groups possible w.r.t. current 
requested tile size. */
@@ -191,7 +163,6 @@ bool DeviceSplitKernel::path_trace(DeviceTask *task,
                /* Allocate work_pool_wgs memory. */
                work_pool_wgs.resize(max_work_groups * sizeof(unsigned int));
                device->mem_alloc("work_pool_wgs", work_pool_wgs, 
MEM_READ_WRITE);
-#endif  /* __WORK_STEALING__ */
 
                queue_index.resize(NUM_QUEUES * sizeof(int));
                device->mem_alloc("queue_index", queue_index, MEM_READ_WRITE);
@@ -241,7 +212,6 @@ bool DeviceSplitKernel::path_trace(DeviceTask *task,
                
if(!device->enqueue_split_kernel_data_init(KernelDimensions(global_size, 
local_size),
                                                           subtile,
                                                           num_global_elements,
-                                                          num_parallel_samples,
                                                           kgbuffer,
                                                           kernel_data,
                                                           split_data,
diff --git a/intern/cycles/device/opencl/opencl_split.cpp 
b/intern/cycles/device/opencl/opencl_split.cpp
index e93b0dc7a2..8d3e2598c5 100644
--- a/intern/cycles/device/opencl/opencl_split.cpp
+++ b/intern/cycles/device/opencl/opencl_split.cpp
@@ -174,7 +174,6 @@ public:
        virtual bool enqueue_split_kernel_data_init(const KernelDimensions& dim,
                                                    RenderTile& rtile,
                                                    int num_global_elements,
-                                                   int num_parallel_samples,
                                                    device_memory& 
kernel_globals,
                                                    device_memory& kernel_data,
                                                    device_memory& split_data,
@@ -225,11 +224,8 @@ public:
                                        queue_index,
                                        dQueue_size,
                                        use_queues_flag,
-#ifdef __WORK_STEALING__
                                        work_pool_wgs,
                                        rtile.num_samples,
-#endif
-                                       num_parallel_samples,
                                        rtile.buffer_offset_x,
                                        rtile.buffer_offset_y,
                                        rtile.buffer_rng_state_stride,
diff --git a/intern/cycles/kernel/kernel_passes.h 
b/intern/cycles/kernel/kernel_passes.h
index 7aec47e495..7790cce067 100644
--- a/intern/cycles/kernel/kernel_passes.h
+++ b/intern/cycles/kernel/kernel_passes.h
@@ -19,16 +19,16 @@ CCL_NAMESPACE_BEGIN
 ccl_device_inline void kernel_write_pass_float(ccl_global float *buffer, int 
sample, float value)
 {
        ccl_global float *buf = buffer;
-#if defined(__SPLIT_KERNEL__) && defined(__WORK_STEALING__)
+#if defined(__SPLIT_KERNEL__)
        atomic_add_and_fetch_float(buf, value);
 #else
        *buf = (sample == 0)? value: *buf + value;
-#endif // __SPLIT_KERNEL__ && __WORK_STEALING__
+#endif  /* __SPLIT_KERNEL__ */
 }
 
 ccl_device_inline void kernel_write_pass_float3(ccl_global float *buffer, int 
sample, float3 value)
 {
-#if defined(__SPLIT_KERNEL__) && defined(__WORK_STEALING__)
+#if defined(__SPLIT_KERNEL__)
        ccl_global float *buf_x = buffer + 0;
        ccl_global float *buf_y = buffer + 1;
        ccl_global float *buf_z = buffer + 2;
@@ -39,12 +39,12 @@ ccl_device_inline void kernel_write_pass_float3(ccl_global 
float *buffer, int sa
 #else
        ccl_global float3 *buf = (ccl_global float3*)buffer;
        *buf = (sample == 0)? value: *buf + value;
-#endif // __SPLIT_KERNEL__ && __WORK_STEALING__
+#endif  /* __SPLIT_KERNEL__ */
 }
 
 ccl_device_inline void kernel_write_pass_float4(ccl_global float *buffer, int 
sample, float4 value)
 {
-#if defined(__SPLIT_KERNEL__) && defined(__WORK_STEALING__)
+#if defined(__SPLIT_KERNEL__)
        ccl_global float *buf_x = buffer + 0;
        ccl_global float *buf_y = buffer + 1;
        ccl_global float *buf_z = buffer + 2;
@@ -57,7 +57,7 @@ ccl_device_inline void kernel_write_pass_float4(ccl_global 
float *buffer, int sa
 #else
        ccl_global float4 *buf = (ccl_global float4*)buffer;
        *buf = (sample == 0)? value: *buf + value;
-#endif // __SPLIT_KERNEL__ && __WORK_STEALING__
+#endif  /* __SPLIT_KERNEL__ */
 }
 
 ccl_device_inline void kernel_write_data_passes(KernelGlobals *kg, ccl_global 
float *buffer, PathRadiance *L,
diff --git a/intern/cycles/kernel/kernel_types.h 
b/intern/cycles/kernel/kernel_types.h
index 5e7b8fef5c..b49c602823 100644
--- a/intern/cycles/ke

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to