Re: pgbench - add pseudo-random permutation function - Mailing list pgsql-hackers

From Thomas Munro
Subject Re: pgbench - add pseudo-random permutation function
Date
Msg-id CA+hUKGJexK+xNCyY6xmg+NcMjHBX-+eoW7bWzzv3c6xb=EYL6Q@mail.gmail.com
Whole thread Raw
In response to Re: pgbench - add pseudo-random permutation function  (Fabien COELHO <coelho@cri.ensmp.fr>)
Responses Re: pgbench - add pseudo-random permutation function  (Fabien COELHO <coelho@cri.ensmp.fr>)
List pgsql-hackers
On Fri, May 24, 2019 at 2:46 AM Fabien COELHO <coelho@cri.ensmp.fr> wrote:
> Here is a v15 which is a rebase, plus a large simplification of the modmul
> function if an int128 type is available, which is probably always…

> > Function nbits(), which was previously discussed, has been simplified by
> > using the function pg_popcount64().

Hi Fabien, Suzuki-san,

I am not smart enough to commit this or judge its value for
benchmarking, but I have a few trivial comments on the language:

+    It allows to mix the output of non uniform random functions so that

"It allows the output of non-uniform random functions to be mixed so that"

+    ensures that a perfect permutation is applied: there are no collisions
+    nor holes in the output values.

"neither collisions nor holes", or "no collisions or holes"

+    The function errors if size is not positive.

"raises an error"

+ * 24 bits mega primes from https://primes.utm.edu/lists/small/millions/

"24 bit mega primes"

+/* length of n binary representation */
+static int
+nbits(uint64 n)
+{
+    /* set lower bits to 1 and count them */
+    return pg_popcount64(compute_mask(n));
+}

I suppose you could use n == 0 ? 0 : pg_leftmost_one_pos64(n) + 1, and then...

+/* return smallest mask holding n  */
+static uint64
+compute_mask(uint64 n)
+{
+    n |= n >> 1;
+    n |= n >> 2;
+    n |= n >> 4;
+    n |= n >> 8;
+    n |= n >> 16;
+    n |= n >> 32;
+    return n;
+}

... here you could use 1 << nbits(n)) - 1.  I have no idea if doing it
that way around is better, it's just a thought and removes a few lines
of bit-swizzling code.

--
Thomas Munro
https://enterprisedb.com



pgsql-hackers by date:

Previous
From: Amit Kapila
Date:
Subject: Re: POC: Cleaning up orphaned files using undo logs
Next
From: Justin Pryzby
Date:
Subject: Re: make \d pg_toast.foo show its indices ; and, \d toast show itsmain table ; and \d relkind=I show its partitions (and tablespace)