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)

Reply via email to