Re: pgbench - add pseudo-random permutation function
От | Thomas Munro |
---|---|
Тема | Re: pgbench - add pseudo-random permutation function |
Дата | |
Msg-id | CA+hUKGJexK+xNCyY6xmg+NcMjHBX-+eoW7bWzzv3c6xb=EYL6Q@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: pgbench - add pseudo-random permutation function (Fabien COELHO <coelho@cri.ensmp.fr>) |
Ответы |
Re: pgbench - add pseudo-random permutation function
|
Список | 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 по дате отправления: