diff options
Diffstat (limited to 'src/kernels/level2/level2.opencl')
-rw-r--r-- | src/kernels/level2/level2.opencl | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/src/kernels/level2/level2.opencl b/src/kernels/level2/level2.opencl index 1b0efeab..be979766 100644 --- a/src/kernels/level2/level2.opencl +++ b/src/kernels/level2/level2.opencl @@ -109,7 +109,18 @@ inline void MatrixUpdate2(const int id1, const int id2, const int max1, const in // Bounds of a regular matrix if (id1 < max1 && id2 < max2) { - const int a_index = id2*a_ld + id1 + a_offset; + #if defined(ROUTINE_SPR2) || defined(ROUTINE_HPR2) + int a_index; + if (is_upper) { + a_index = (id1 <= id2) ? ((id2+1)*id2)/2 + id1 : ((id1+1)*id1)/2 + id2; + } + else { + a_index = (id1 >= id2) ? ((2*a_ld-(id2+1))*id2)/2 + id1 : ((2*a_ld-(id1+1))*id1)/2 + id2; + } + a_index += a_offset; + #else + const int a_index = id2*a_ld + id1 + a_offset; + #endif // Loads the current value of the A matrix const real avalue = agm[a_index]; |