Re: random() (was Re: New GUC to sample log queries) - Mailing list pgsql-hackers

From Fabien COELHO
Subject Re: random() (was Re: New GUC to sample log queries)
Date
Msg-id alpine.DEB.2.21.1812281149090.32444@lancre
Whole thread Raw
In response to Re: random() (was Re: New GUC to sample log queries)  (Fabien COELHO <coelho@cri.ensmp.fr>)
Responses Re: random() (was Re: New GUC to sample log queries)  (Fabien COELHO <coelho@cri.ensmp.fr>)
List pgsql-hackers
>> - lrand48 (48 bits state as 3 uint16)        is 29 ops
>>   (10 =, 8 *, 7 +, 4 >>)
>
> - xoshiro256** (256 bits states as 4 uint64) is 24 ops (18 if rot in hw)
>   8 =, 2 *, 2 +, 5 <<, 5 ^, 2 |
>
> See http://vigna.di.unimi.it/xorshift/

Small benchmark on my laptop with gcc-7.3 -O3:

  - pg_lrand48 takes 4.0 seconds to generate 1 billion 32-bit ints

  - xoshiro256** takes 1.6 seconds to generate 1 billion 64-bit ints

With -O2 it is 4.8 and 3.4 seconds, respectively. So significantly better 
speed _and_ quality are quite achievable.

Note that small attempt at optimizing these functions (inline constants, 
array replaced with scalars) did not yield significant improvements.

-- 
Fabien.
Attachment

pgsql-hackers by date:

Previous
From: Magnus Hagander
Date:
Subject: Re: Offline enabling/disabling of data checksums
Next
From: Peter Eisentraut
Date:
Subject: Re: could recovery_target_timeline=latest be the default in standbymode?