Re: Some optimisations for numeric division

Dean Rasheed <dean.a.rasheed@gmail.com>

From: Dean Rasheed <dean.a.rasheed@gmail.com>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2022-02-23T22:46:50Z
Lists: pgsql-hackers
On Wed, 23 Feb 2022 at 20:55, Tom Lane <tgl@sss.pgh.pa.us> wrote:
>
> I took a quick look through these (just eyeball, didn't try to verify
> your performance statements).

Thanks for looking!

>  I'm +1 on 0001 and 0002, but 0003 feels
> a bit ad-hoc.  It certainly *looks* weird for the allegedly faster
> function to be handing off to the allegedly slower one.  I also wonder
> if we're leaving anything on the table by not exploiting
> div_var_fast's weaker roundoff guarantees in this case.  Should we
> think about a more thoroughgoing redesign of these functions' APIs?

Hmm, I'm not sure what kind of thing you had in mind.

One thought that occurred to me was that it's a bit silly that
exp_var() and ln_var() have to use a NumericVar for what could just be
an int, if we had a div_var_int() function that could divide by an
int. Then both div_var() and div_var_fast() could hand off to it for
one and two digit divisors.

Regards,
Dean



Commits

  1. Optimise numeric division for one and two base-NBASE digit divisors.

  2. Simplify the inner loop of numeric division in div_var().

  3. Apply auto-vectorization to the inner loop of div_var_fast().

  4. Apply auto-vectorization to the inner loop of numeric multiplication.