summaryrefslogtreecommitdiff
path: root/sc/source/core/opencl/oclkernels.hxx
diff options
context:
space:
mode:
authorMichael Meeks <michael.meeks@suse.com>2013-07-08 21:35:26 +0100
committerKohei Yoshida <kohei.yoshida@gmail.com>2013-07-11 00:25:36 -0400
commitc6fd693a8a1efb9e301bd623d29411dfa2378e5c (patch)
treec907ed85ad080fc393778d09fd65bbf4f6d1ff70 /sc/source/core/opencl/oclkernels.hxx
parentd5ae61ed2394b6945b969c61aea0adac2234f702 (diff)
cleanup formulagroupcl and add opencl kernel for averagedelta.
Conflicts: sc/source/core/opencl/openclwrapper.hxx Change-Id: Id4777d3854d34ab34dd29b050cd329a803023a39
Diffstat (limited to 'sc/source/core/opencl/oclkernels.hxx')
-rwxr-xr-xsc/source/core/opencl/oclkernels.hxx28
1 files changed, 27 insertions, 1 deletions
diff --git a/sc/source/core/opencl/oclkernels.hxx b/sc/source/core/opencl/oclkernels.hxx
index 6c9012641b54..e13c24a3a158 100755
--- a/sc/source/core/opencl/oclkernels.hxx
+++ b/sc/source/core/opencl/oclkernels.hxx
@@ -142,7 +142,6 @@ __kernel void oclFormulaAverage(__global float *input,__global int *start,__glob
for(i = start[id];i<=end[id];i++)
sum += input[i];
output[id] = sum / (end[id]-start[id]+1);
-
}
//Sumproduct
@@ -162,6 +161,33 @@ __kernel void oclFormulaMinverse(__global float *data,
}
+// Double precision is a requirement of spreadsheets
+#if 0
+#if defined(cl_khr_fp64) // Khronos extension
+#pragma OPENCL EXTENSION cl_khr_fp64 : enable
+#elif defined(cl_amd_fp64) // AMD extension
+#pragma OPENCL EXTENSION cl_amd_fp64 : enable
+#endif
+typedef double fp_t;
+#else
+typedef float fp_t;
+#endif
+
+__kernel void oclAverageDelta(__global fp_t *values, __global fp_t *subtract, __global int start, __global int end, __global fp_t *output)
+{
+ const unsigned int id = get_global_id(0);
+
+ // Average
+ int i;
+ fp_t sum = 0.0;
+ for(i = start; i < end; i++)
+ sum += values[i];
+ fp_t val = sum/(end-start);
+
+ // Subtract & output
+ output[id] = val - subtract[id];
+}
+
);
#endif // USE_EXTERNAL_KERNEL