summaryrefslogtreecommitdiff
path: root/kernels/compiler_workgroup_reduce.cl
diff options
context:
space:
mode:
Diffstat (limited to 'kernels/compiler_workgroup_reduce.cl')
-rw-r--r--kernels/compiler_workgroup_reduce.cl28
1 files changed, 28 insertions, 0 deletions
diff --git a/kernels/compiler_workgroup_reduce.cl b/kernels/compiler_workgroup_reduce.cl
new file mode 100644
index 00000000..27d306bc
--- /dev/null
+++ b/kernels/compiler_workgroup_reduce.cl
@@ -0,0 +1,28 @@
+kernel void compiler_workgroup_reduce_min_uniform(uint src, global uint *dst) {
+ uint min_val = work_group_reduce_min(src);
+ dst[get_local_id(0)] = min_val;
+}
+
+kernel void compiler_workgroup_reduce_min_uint(global uint *src, global uint *dst) {
+ uint val = src[get_local_id(0)];
+ uint min_val = work_group_reduce_min(val);
+ dst[get_local_id(0)] = min_val;
+}
+
+kernel void compiler_workgroup_reduce_max_uint(global uint *src, global uint *dst) {
+ uint val = src[get_local_id(0)];
+ uint max_val = work_group_reduce_max(val);
+ dst[get_local_id(0)] = max_val;
+}
+
+kernel void compiler_workgroup_reduce_min_float(global float *src, global float *dst) {
+ float val = src[get_local_id(0)];
+ float min_val = work_group_reduce_min(val);
+ dst[get_local_id(0)] = min_val;
+}
+
+kernel void compiler_workgroup_reduce_max_float(global float *src, global float *dst) {
+ float val = src[get_local_id(0)];
+ float max_val = work_group_reduce_max(val);
+ dst[get_local_id(0)] = max_val;
+}