[Numpy-discussion] Prototype CorePRNG implementation feedback
Neal Becker
ndbecker2 at gmail.com
Thu Feb 22 06:43:27 EST 2018
What is the syntax to construct an initialized generator?
RandomGenerator(Xoroshiro128(my_seed))?
On Thu, Feb 22, 2018 at 6:06 AM Kevin Sheppard <kevin.k.sheppard at gmail.com>
wrote:
> I have implemented a working prototype of a pluggable RandomState. The
> repo is located at https://github.com/bashtage/core-prng.
>
> The main design has a small PRNG (currently only SplitMix64 and
> Xoroshiro128 are implemented) that does not have any public functions
> available to generate random numbers. These objects only expose methods to
> get and set state and to jump the PRNG.
>
> The random number generator is exposed via an opaque structure wrapped in
> a PyCapsule. This structure has two void pointers, one to the state and
> one to the function that generates the next uint 64. I think in the
> long-run it might make sense to expose a few additional interfaces, such as
> the next random double (makes sense for dSFMT) or the next random uint32
> (makes sense for MT19937). For now, I have deliberately kept it simple.
>
> The user-facing object is called `RandomGenerator` and it can be
> initialized using the syntax `RandomGenerator` or
> `RandomGenerator(Xoroshiro128())`. The object exposes user-facing methods
> (currently only `random_integer` and `random_double`).
>
> A basic demo:
>
> from core_prng.generator import RandomGenerator
> # Splitmix 64 for now
> RandomGenerator().random_integer()
>
> from core_prng.xoroshiro128 import Xoroshiro128
> RandomGenerator(Xoroshiro128()).random_integer()
>
> A few questions that have come up:
>
> 1. Should a passed core PRNG be initialized or not. The syntax RandomGenerator(Xoroshiro128)
> looks nicer than RandomGenerator(Xoroshiro128())
> 2. Which low-level methods should be part of the core PRNG? These
> would all be scalar generators that would be consumed by RandomGenerator
> and exposed through void *. I could imagine some subset of the
> following:
> - uint64
> - uint32
> - double
> - float
> - uint53 (applicable to PRNGs that use doubles as default type)
> 3. Since RandomState is taken, a new name is needed for the
> user-facing object. RandomGenerator is a placeholder but ideally,
> something meaningful could be chosen.
> 4. I can't see how locking can be usefully implemented in the core
> PRNGs without a large penalty. This means that these are not threadsafe.
> This isn't a massive problem but they do access the state (get or set)
> although with GIL.
> 5. Should state be a property -- this isn't Java...
>
>
> Other feedback is of course also welcome.
>
> Kevin
>
>
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion at python.org
> https://mail.python.org/mailman/listinfo/numpy-discussion
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/numpy-discussion/attachments/20180222/a51af2fd/attachment.html>
More information about the NumPy-Discussion
mailing list