Description
There are several instances in the codebase where we have to create N pseudo-random number generators from one, for example:
AdvancedPS.jl/src/container.jl
Lines 121 to 136 in d0d180f
Right now, this is handled by split
, which generates new seeds to be used with new PRNGs.
Lines 33 to 42 in d0d180f
This is not always a reliable method as the new seeds may end up accidentally generating highly correlated sequences of numbers. See, e.g., https://gee.cs.oswego.edu/dl/papers/oopsla14.pdf
We should therefore switch to an underlying RNG type that supports splitting. (Note that right now, we are using Philox2x [paper, library] but the library does not implement a split function, even though it should theoretically be possible. Compare e.g. with Numpy's implementation, which provides a jumped
method for this purpose.)