rand48 replacement - Mailing list pgsql-hackers

From Fabien COELHO
Subject rand48 replacement
Date
Msg-id alpine.DEB.2.22.394.2105241211230.165418@pseudo
Whole thread Raw
Responses Re: rand48 replacement
Re: rand48 replacement
List pgsql-hackers
Hello pg-devs,

I have given a go at proposing a replacement for rand48.

POSIX 1988 (?) rand48 is a LCG PRNG designed to generate 32 bits integers 
or floats based on a 48 bits state on 16 or 32 bits architectures. LCG 
cycles on the low bits, which can be quite annoying. Given that we run on 
64 bits architectures and that we need to generate 64 bits ints or 
doubles, IMHO it makes very little sense to stick to that.

We should (probably) want:
  - one reasonable default PRNG for all pg internal uses.
  - NOT to invent a new design!
  - something fast, close to rand48 (which basically does 2 arithmetic
    ops, so it is hard to compete)
    no need for something cryptographic though, which would imply slow
  - to produce 64 bits integers & doubles with a 52 bits mantissa,
    so state size > 64 bits.
  - a small state though, because we might generate quite a few of them
    for different purposes so state size <= 256 or even <= 128 bits
  - the state to be aligned to whatever => 128 bits
  - 64 bits operations for efficiency on modern architectures,
    but not 128 bits operations.
  - not to depend on special hardware for speed (eg MMX/SSE/AES).
  - not something with obvious known and relevant defects.
  - not something with "rights" attached.

These constraints reduce drastically the available options from 
https://en.wikipedia.org/wiki/List_of_random_number_generators

The attached patch removes "rand48" and adds a "pg_prng" implementation 
based on xoroshiro128ss, and replaces it everywhere. In pgbench, the non 
portable double-relying code is replaced by hopefully portable ints. The 
interface makes it easy to replace the underlying PRNG if something else 
is desired.

Thanks for your feedback.

-- 
Fabien.
Attachment

pgsql-hackers by date:

Previous
From: Magnus Hagander
Date:
Subject: Re: Commitfest app vs. pgsql-docs
Next
From: Tomas Vondra
Date:
Subject: Re: Performance degradation of REFRESH MATERIALIZED VIEW