summaryrefslogtreecommitdiff
path: root/src/kernels/level1/xamax.opencl
diff options
context:
space:
mode:
Diffstat (limited to 'src/kernels/level1/xamax.opencl')
-rw-r--r--src/kernels/level1/xamax.opencl16
1 files changed, 12 insertions, 4 deletions
diff --git a/src/kernels/level1/xamax.opencl b/src/kernels/level1/xamax.opencl
index 85cbdc86..7cbbd6b5 100644
--- a/src/kernels/level1/xamax.opencl
+++ b/src/kernels/level1/xamax.opencl
@@ -30,7 +30,11 @@ R"(
// =================================================================================================
// The main reduction kernel, performing the loading and the majority of the operation
-__kernel __attribute__((reqd_work_group_size(WGS1, 1, 1)))
+#if RELAX_WORKGROUP_SIZE == 1
+ __kernel
+#else
+ __kernel __attribute__((reqd_work_group_size(WGS1, 1, 1)))
+#endif
void Xamax(const int n,
const __global real* restrict xgm, const int x_offset, const int x_inc,
__global singlereal* maxgm, __global unsigned int* imaxgm) {
@@ -51,7 +55,7 @@ void Xamax(const int n,
while (id < n) {
const int x_index = id*x_inc + x_offset;
#if PRECISION == 3232 || PRECISION == 6464
- singlereal x = xgm[x_index].x;
+ singlereal x = fabs(xgm[x_index].x) + fabs(xgm[x_index].y);
#else
singlereal x = xgm[x_index];
#endif
@@ -66,7 +70,7 @@ void Xamax(const int n,
#endif
if (x > max) {
max = x;
- imax = id*x_inc + x_offset;
+ imax = id;
}
id += WGS1*num_groups;
}
@@ -96,7 +100,11 @@ void Xamax(const int n,
// The epilogue reduction kernel, performing the final bit of the operation. This kernel has to
// be launched with a single workgroup only.
-__kernel __attribute__((reqd_work_group_size(WGS2, 1, 1)))
+#if RELAX_WORKGROUP_SIZE == 1
+ __kernel
+#else
+ __kernel __attribute__((reqd_work_group_size(WGS2, 1, 1)))
+#endif
void XamaxEpilogue(const __global singlereal* restrict maxgm,
const __global unsigned int* restrict imaxgm,
__global unsigned int* imax, const int imax_offset) {