Mercurial > octave
changeset 29980:e3e0193963ea
Improve performance of filter along dimensions > 1 (bug #60928).
Replacing code pattern using while loop to calculate offset
with division and multiplication leads to 100X improvement
in filtering along second dimension.
* filter.cc (filter (b, a, x, si, dim)): Replace while loop to
calculate offset with division and multiplication.
author | Rik <rik@octave.org> |
---|---|
date | Tue, 17 Aug 2021 09:46:52 -0700 |
parents | ac5e1b64f8c9 |
children | 0c3d248a3b44 |
files | libinterp/corefcn/filter.cc |
diffstat | 1 files changed, 2 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/libinterp/corefcn/filter.cc Tue Aug 17 09:12:20 2021 -0700 +++ b/libinterp/corefcn/filter.cc Tue Aug 17 09:46:52 2021 -0700 @@ -120,14 +120,9 @@ x_offset = num * x_len; else { - octave_idx_type x_offset2 = 0; x_offset = num; - while (x_offset >= x_stride) - { - x_offset -= x_stride; - x_offset2++; - } - x_offset += x_offset2 * x_stride * x_len; + octave_idx_type n_strides = num / x_stride; + x_offset += n_strides * x_stride * (x_len - 1); } octave_idx_type si_offset = num * si_len;