Alex D Herbert created RNG-72:
---------------------------------
Summary: Create a RandomSource.create benchmark
Key: RNG-72
URL: https://issues.apache.org/jira/browse/RNG-72
Project: Commons RNG
Issue Type: New Feature
Components: simple
Affects Versions: 1.3
Reporter: Alex D Herbert
The recommended method to construct a {{UniformRandomProvider}} is to use, e.g.:
{code:java}
import org.apache.commons.rng.UniformRandomProvider;
import org.apache.commons.rng.simple.RandomSource;
UniformRandomProvider rng = RandomSource.create(RandomSource.MWC_256);
{code}
The factory method knows the type of seed required for the constructor and
generates one as appropriate.
This factory method could be made more efficient, in particular:
* Reducing synchronisation around the single source of random seed data
* Adding knowledge of the required seed size for arrays
* Changing internal data structures, e.g. {{Map<Class<?>,
SeedConverter<?,?>>}} can be changed to {{Map<SeedType, SeedConverter<?,?>>}}
using an {{EnumMap}} if a new enum {{SeedType}} was created for all the
supported seeds (currently 4 types).
* Add a new interface to replace {{SeedConverter<?,?>.convert()}} with a
{{.convert(int outputArraySize)}} method to allow conversions to generate
appropriately sized arrays. The parameter can be ignored for non-array
conversions but could optimise array conversions.
This ticket is to add a JMH benchmark to compare the speed of construction of
all the providers using:
* Their native constructor
* {{RandomSource}} using the native seed of the correct size (calls a
constructor using reflection)
* {{RandomSource}} using a non native seed (requires seed conversion)
* {{RandomSource}} using no seed (requires seed generation)
The report will be posted here. It could be added to the user guide for
reference.
This work is motivated by the new {{XorShiRo}} generators in version 1.3 that
have a native array seed size of 2, 4, or 8. The current {{RandomSource}}
create method will generate a fixed seed of length 128 for seeding.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)