diff options
Diffstat (limited to 'src/kernels/level1/xamax.opencl')
-rw-r--r-- | src/kernels/level1/xamax.opencl | 16 |
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) { |