pgsql: Marginal performance hacking in erand48.c.

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Marginal performance hacking in erand48.c.
Date: 2018-12-28 20:06:53
Message-ID: E1gcyPF-0005Zz-Fg@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Marginal performance hacking in erand48.c.

Get rid of the multiplier and addend variables in favor of hard-wired
constants. Do the multiply-and-add using uint64 arithmetic, rather
than manually combining several narrower multiplications and additions.
Make _dorand48 return the full-width new random value, and have its
callers use that directly (after suitable masking) rather than
reconstructing what they need from the unsigned short[] representation.

On my machine, this is good for a nearly factor-of-2 speedup of
pg_erand48(), probably mostly from needing just one call of ldexp()
rather than three. The wins for the other functions are smaller
but measurable. While none of the existing call sites are really
performance-critical, a cycle saved is a cycle earned; and besides
the machine code is smaller this way (at least on x86_64).

Patch by me, but the original idea to optimize this by switching
to int64 arithmetic is from Fabien Coelho.

Discussion: https://postgr.es/m/1551.1546018192@sss.pgh.pa.us

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/6b9bba2df8d469a13bf8f0b9eb6933c7eaaff2c1

Modified Files
--------------
src/port/erand48.c | 71 +++++++++++++++++++++++++-----------------------------
1 file changed, 33 insertions(+), 38 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Michael Paquier 2018-12-28 23:25:17 pgsql: Improve description of DEFAULT_XLOG_SEG_SIZE in pg_config.h
Previous Message Tom Lane 2018-12-28 19:09:16 pgsql: Fix latent problem with pg_jrand48().