October 26, 2016, 14:40 (GMT) |
Cycles: Add CPU split kernels This adds all split kernels for CPU devices besides the `data_init` kernel which still needs to be written for CPU. While the kernels build and load properly they don't do anything yet. |
October 25, 2016, 15:36 (GMT) |
Cycles: Replace OpenCL atomic functions with own versions |
October 25, 2016, 15:36 (GMT) |
Cycles: Replace OpenCL work item functions with own versions |
October 25, 2016, 13:09 (GMT) |
Cycles: Rearrange split kernel code to move all logic out of OpenCL kernel files We need all logic in a place that can be used when building for other devices besides OpenCL. This leaves things a little messy at the moment, code deduplication and general clean up can happen later. |
October 25, 2016, 12:49 (GMT) |
Cycles: Add code to register kernel functions Makes it easy to retrieve kernel functions for different architectures without needing large ifdef chains everywhere. |
October 25, 2016, 09:12 (GMT) |
Cycles: Add missing check for split kernel build error |
October 25, 2016, 08:56 (GMT) |
Merge branch 'master' into cycles_split_kernel |
October 24, 2016, 10:34 (GMT) |
Cycles: Fix a few memory leaks in CPU split kernel |
October 21, 2016, 16:15 (GMT) |
Cycles: Begin implementing host side of CPU split kernel Doesn't do anything yet, just getting things started. |
October 21, 2016, 14:15 (GMT) |
Cycles: Add debug flags to control usage of split kernel for CPU devices |
October 21, 2016, 13:25 (GMT) |
Cycles: Remove tile splitting logic for split kernel This is a huge reduction in code that was very hard to work with. It will be much easier to go forward now that it is gone. Unfortunate downside to not having tile splitting anymore is if the tile size is set too large the user could get an out of memory error. We will have to fix this at some point, but for now getting the kernel to run on CPU is more important. Also at this point the host side of the split kernel is almost entirely independent of the underlying device, so work on CPU implementation can finally start. |
October 20, 2016, 15:22 (GMT) |
Cycles: Begin moving split kernel logic into own class The new class `DeviceSplitKernel` will handle all logic for enqueueing of kernels and memory memory management for the split kernel. Devices that support the split kernel will create an instance of this class and call its methods to run the split kernel. There's still some work to do yet to make this device independent and to deal with tile splitting. |
October 18, 2016, 16:13 (GMT) |
Cycles: Implement enqueue_split_kernel_data_init for OpenCL devices The `enqueue_split_kernel_data_init()` function will allow each device type to set up the various data buffers how ever they need to without concerning the rest of the split kernel logic. |
October 18, 2016, 14:59 (GMT) |
Cycles: Add SplitKernelFunction with OpenCL implementation SplitKernelFunction can represent a split kernel function for any device its been implemented for. Currently this is only for OpenCL to simplify the enqueueing of the split kernels and move another step closer to a split kernel that can run on any device. |
October 18, 2016, 10:20 (GMT) |
Cycles: Replace use of cl_mem with device_memory in split kernel device Working towards using only device agnostic types and methods in the host. |
October 17, 2016, 12:51 (GMT) |
Merge branch 'master' into cycles_split_kernel |
October 17, 2016, 12:23 (GMT) |
Cycles: Refactor so all split kernels have same signature This is to set things up for supporting the split kernel on cpu and other devices. By having the same signature for each kernel we can deduplicate a lot of code without needing any trickery. The only kernel that doesn't share this signature is the `data_init` kernel, which might end up being different for each device type. |
October 14, 2016, 13:48 (GMT) |
Cycles: Simplify shared buffer and argument passing in split kernel Adds a single buffer for storing and passing around data shared between kernels. The idea is to have there be less code so things are easier to work with and later deduplicate. Benefits: - reduces the number of buffers that need to be allocated and kept track of by using a single buffer for data shared between kernels - simplify passing of arguments to kernels by using a pointer in kernel globals to point to shared data - simplify calculation of shared data size Things may need renaming / reorganizing but this is just to get things started. |
October 10, 2016, 12:39 (GMT) |
Cycles: Add comments to endif directives `kernel_path.h` and `kernel_path_branched.h` have a lot of conditional code and it was kind of hard to read, things should be better now. |
|