[
https://issues.apache.org/jira/browse/RNG-50?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16570624#comment-16570624
]
Alex D Herbert commented on RNG-50:
-----------------------------------
Here are the relative performance figures for the
AhrensDieterMarsagliaTsangGammaSampler split into two samplers for each of the
algorithms (theta<1 and theta>1):
||Source||Use||theta||Name||Relative Score||
|KISS|Repeat|0.123|AhrensDieterMarsagliaTsangGammaSampler|1|
|KISS|Repeat|0.123|WrapperAhrensDieterMarsagliaTsangGammaSampler|0.999314867558132|
|KISS|Repeat|0.123|SmallThetaAhrensDieterMarsagliaTsangGammaSampler|0.997856115261043|
|KISS|Repeat|0.51|AhrensDieterMarsagliaTsangGammaSampler|1|
|KISS|Repeat|0.51|WrapperAhrensDieterMarsagliaTsangGammaSampler|0.979838366018061|
|KISS|Repeat|0.51|SmallThetaAhrensDieterMarsagliaTsangGammaSampler|0.974697250148467|
|KISS|Repeat|0.9876|WrapperAhrensDieterMarsagliaTsangGammaSampler|1|
|KISS|Repeat|0.9876|SmallThetaAhrensDieterMarsagliaTsangGammaSampler|0.995633343759617|
|KISS|Repeat|0.9876|AhrensDieterMarsagliaTsangGammaSampler|0.994679961657963|
|KISS|Repeat|2.456|AhrensDieterMarsagliaTsangGammaSampler|1|
|KISS|Repeat|2.456|LargeThetaAhrensDieterMarsagliaTsangGammaSampler|0.981137656894234|
|KISS|Repeat|2.456|WrapperAhrensDieterMarsagliaTsangGammaSampler|0.96496882799406|
|KISS|Repeat|60.9|AhrensDieterMarsagliaTsangGammaSampler|1|
|KISS|Repeat|60.9|LargeThetaAhrensDieterMarsagliaTsangGammaSampler|0.986385403709793|
|KISS|Repeat|60.9|WrapperAhrensDieterMarsagliaTsangGammaSampler|0.96996595232745|
|KISS|Single|0.123|AhrensDieterMarsagliaTsangGammaSampler|1|
|KISS|Single|0.123|SmallThetaAhrensDieterMarsagliaTsangGammaSampler|0.992892324056975|
|KISS|Single|0.123|WrapperAhrensDieterMarsagliaTsangGammaSampler|0.991008756338682|
|KISS|Single|0.51|AhrensDieterMarsagliaTsangGammaSampler|1|
|KISS|Single|0.51|SmallThetaAhrensDieterMarsagliaTsangGammaSampler|0.987404815188111|
|KISS|Single|0.51|WrapperAhrensDieterMarsagliaTsangGammaSampler|0.987282792604607|
|KISS|Single|0.9876|AhrensDieterMarsagliaTsangGammaSampler|1|
|KISS|Single|0.9876|SmallThetaAhrensDieterMarsagliaTsangGammaSampler|0.992693301088901|
|KISS|Single|0.9876|WrapperAhrensDieterMarsagliaTsangGammaSampler|0.985891630196386|
|KISS|Single|2.456|WrapperAhrensDieterMarsagliaTsangGammaSampler|1|
|KISS|Single|2.456|LargeThetaAhrensDieterMarsagliaTsangGammaSampler|0.985486022840169|
|KISS|Single|2.456|AhrensDieterMarsagliaTsangGammaSampler|0.974513844933213|
|KISS|Single|60.9|WrapperAhrensDieterMarsagliaTsangGammaSampler|1|
|KISS|Single|60.9|LargeThetaAhrensDieterMarsagliaTsangGammaSampler|0.990284454732188|
|KISS|Single|60.9|AhrensDieterMarsagliaTsangGammaSampler|0.886228310897395|
|SPLIT_MIX_64|Repeat|0.123|AhrensDieterMarsagliaTsangGammaSampler|1|
|SPLIT_MIX_64|Repeat|0.123|WrapperAhrensDieterMarsagliaTsangGammaSampler|0.998143488677563|
|SPLIT_MIX_64|Repeat|0.123|SmallThetaAhrensDieterMarsagliaTsangGammaSampler|0.994052261665475|
|SPLIT_MIX_64|Repeat|0.51|AhrensDieterMarsagliaTsangGammaSampler|1|
|SPLIT_MIX_64|Repeat|0.51|WrapperAhrensDieterMarsagliaTsangGammaSampler|0.996677980205046|
|SPLIT_MIX_64|Repeat|0.51|SmallThetaAhrensDieterMarsagliaTsangGammaSampler|0.993270746547331|
|SPLIT_MIX_64|Repeat|0.9876|WrapperAhrensDieterMarsagliaTsangGammaSampler|1|
|SPLIT_MIX_64|Repeat|0.9876|AhrensDieterMarsagliaTsangGammaSampler|0.99055294786002|
|SPLIT_MIX_64|Repeat|0.9876|SmallThetaAhrensDieterMarsagliaTsangGammaSampler|0.986936892383685|
|SPLIT_MIX_64|Repeat|2.456|AhrensDieterMarsagliaTsangGammaSampler|1|
|SPLIT_MIX_64|Repeat|2.456|WrapperAhrensDieterMarsagliaTsangGammaSampler|0.980364364977623|
|SPLIT_MIX_64|Repeat|2.456|LargeThetaAhrensDieterMarsagliaTsangGammaSampler|0.976947145993722|
|SPLIT_MIX_64|Repeat|60.9|WrapperAhrensDieterMarsagliaTsangGammaSampler|1|
|SPLIT_MIX_64|Repeat|60.9|AhrensDieterMarsagliaTsangGammaSampler|0.985599292210966|
|SPLIT_MIX_64|Repeat|60.9|LargeThetaAhrensDieterMarsagliaTsangGammaSampler|0.96909655781547|
|SPLIT_MIX_64|Single|0.123|AhrensDieterMarsagliaTsangGammaSampler|1|
|SPLIT_MIX_64|Single|0.123|WrapperAhrensDieterMarsagliaTsangGammaSampler|0.968976050516199|
|SPLIT_MIX_64|Single|0.123|SmallThetaAhrensDieterMarsagliaTsangGammaSampler|0.946711221061929|
|SPLIT_MIX_64|Single|0.51|WrapperAhrensDieterMarsagliaTsangGammaSampler|1|
|SPLIT_MIX_64|Single|0.51|AhrensDieterMarsagliaTsangGammaSampler|0.991595682766503|
|SPLIT_MIX_64|Single|0.51|SmallThetaAhrensDieterMarsagliaTsangGammaSampler|0.979664085554298|
|SPLIT_MIX_64|Single|0.9876|WrapperAhrensDieterMarsagliaTsangGammaSampler|1|
|SPLIT_MIX_64|Single|0.9876|AhrensDieterMarsagliaTsangGammaSampler|0.994520838352321|
|SPLIT_MIX_64|Single|0.9876|SmallThetaAhrensDieterMarsagliaTsangGammaSampler|0.994315980903861|
|SPLIT_MIX_64|Single|2.456|LargeThetaAhrensDieterMarsagliaTsangGammaSampler|1|
|SPLIT_MIX_64|Single|2.456|WrapperAhrensDieterMarsagliaTsangGammaSampler|0.95270910818897|
|SPLIT_MIX_64|Single|2.456|AhrensDieterMarsagliaTsangGammaSampler|0.915563676863679|
|SPLIT_MIX_64|Single|60.9|WrapperAhrensDieterMarsagliaTsangGammaSampler|1|
|SPLIT_MIX_64|Single|60.9|LargeThetaAhrensDieterMarsagliaTsangGammaSampler|0.965586027550413|
|SPLIT_MIX_64|Single|60.9|AhrensDieterMarsagliaTsangGammaSampler|0.930036466862343|
|WELL_1024_A|Repeat|0.123|AhrensDieterMarsagliaTsangGammaSampler|1|
|WELL_1024_A|Repeat|0.123|SmallThetaAhrensDieterMarsagliaTsangGammaSampler|0.999759207234269|
|WELL_1024_A|Repeat|0.123|WrapperAhrensDieterMarsagliaTsangGammaSampler|0.960714574210619|
|WELL_1024_A|Repeat|0.51|WrapperAhrensDieterMarsagliaTsangGammaSampler|1|
|WELL_1024_A|Repeat|0.51|SmallThetaAhrensDieterMarsagliaTsangGammaSampler|0.997214815402466|
|WELL_1024_A|Repeat|0.51|AhrensDieterMarsagliaTsangGammaSampler|0.995638389997753|
|WELL_1024_A|Repeat|0.9876|WrapperAhrensDieterMarsagliaTsangGammaSampler|1|
|WELL_1024_A|Repeat|0.9876|AhrensDieterMarsagliaTsangGammaSampler|0.999615765335818|
|WELL_1024_A|Repeat|0.9876|SmallThetaAhrensDieterMarsagliaTsangGammaSampler|0.992742552049737|
|WELL_1024_A|Repeat|2.456|WrapperAhrensDieterMarsagliaTsangGammaSampler|1|
|WELL_1024_A|Repeat|2.456|LargeThetaAhrensDieterMarsagliaTsangGammaSampler|0.959632035875804|
|WELL_1024_A|Repeat|2.456|AhrensDieterMarsagliaTsangGammaSampler|0.908229750026379|
|WELL_1024_A|Repeat|60.9|LargeThetaAhrensDieterMarsagliaTsangGammaSampler|1|
|WELL_1024_A|Repeat|60.9|WrapperAhrensDieterMarsagliaTsangGammaSampler|0.946258473005521|
|WELL_1024_A|Repeat|60.9|AhrensDieterMarsagliaTsangGammaSampler|0.885602542069069|
|WELL_1024_A|Single|0.123|AhrensDieterMarsagliaTsangGammaSampler|1|
|WELL_1024_A|Single|0.123|SmallThetaAhrensDieterMarsagliaTsangGammaSampler|0.990916656980466|
|WELL_1024_A|Single|0.123|WrapperAhrensDieterMarsagliaTsangGammaSampler|0.970778101174167|
|WELL_1024_A|Single|0.51|WrapperAhrensDieterMarsagliaTsangGammaSampler|1|
|WELL_1024_A|Single|0.51|AhrensDieterMarsagliaTsangGammaSampler|0.996484555478465|
|WELL_1024_A|Single|0.51|SmallThetaAhrensDieterMarsagliaTsangGammaSampler|0.993968147078637|
|WELL_1024_A|Single|0.9876|WrapperAhrensDieterMarsagliaTsangGammaSampler|1|
|WELL_1024_A|Single|0.9876|AhrensDieterMarsagliaTsangGammaSampler|0.997544041582307|
|WELL_1024_A|Single|0.9876|SmallThetaAhrensDieterMarsagliaTsangGammaSampler|0.985669549346035|
|WELL_1024_A|Single|2.456|WrapperAhrensDieterMarsagliaTsangGammaSampler|1|
|WELL_1024_A|Single|2.456|LargeThetaAhrensDieterMarsagliaTsangGammaSampler|0.974460664710453|
|WELL_1024_A|Single|2.456|AhrensDieterMarsagliaTsangGammaSampler|0.916195275638669|
|WELL_1024_A|Single|60.9|WrapperAhrensDieterMarsagliaTsangGammaSampler|1|
|WELL_1024_A|Single|60.9|LargeThetaAhrensDieterMarsagliaTsangGammaSampler|0.978043049891162|
|WELL_1024_A|Single|60.9|AhrensDieterMarsagliaTsangGammaSampler|0.919423720723257|
|WELL_44497_B|Repeat|0.123|SmallThetaAhrensDieterMarsagliaTsangGammaSampler|1|
|WELL_44497_B|Repeat|0.123|AhrensDieterMarsagliaTsangGammaSampler|0.998599067398488|
|WELL_44497_B|Repeat|0.123|WrapperAhrensDieterMarsagliaTsangGammaSampler|0.937456696969929|
|WELL_44497_B|Repeat|0.51|SmallThetaAhrensDieterMarsagliaTsangGammaSampler|1|
|WELL_44497_B|Repeat|0.51|AhrensDieterMarsagliaTsangGammaSampler|0.995732469982672|
|WELL_44497_B|Repeat|0.51|WrapperAhrensDieterMarsagliaTsangGammaSampler|0.925357121925874|
|WELL_44497_B|Repeat|0.9876|AhrensDieterMarsagliaTsangGammaSampler|1|
|WELL_44497_B|Repeat|0.9876|SmallThetaAhrensDieterMarsagliaTsangGammaSampler|0.987622756882241|
|WELL_44497_B|Repeat|0.9876|WrapperAhrensDieterMarsagliaTsangGammaSampler|0.927404752094206|
|WELL_44497_B|Repeat|2.456|LargeThetaAhrensDieterMarsagliaTsangGammaSampler|1|
|WELL_44497_B|Repeat|2.456|AhrensDieterMarsagliaTsangGammaSampler|0.996630000486108|
|WELL_44497_B|Repeat|2.456|WrapperAhrensDieterMarsagliaTsangGammaSampler|0.984861902972051|
|WELL_44497_B|Repeat|60.9|AhrensDieterMarsagliaTsangGammaSampler|1|
|WELL_44497_B|Repeat|60.9|WrapperAhrensDieterMarsagliaTsangGammaSampler|0.999962995545578|
|WELL_44497_B|Repeat|60.9|LargeThetaAhrensDieterMarsagliaTsangGammaSampler|0.981947886293465|
|WELL_44497_B|Single|0.123|AhrensDieterMarsagliaTsangGammaSampler|1|
|WELL_44497_B|Single|0.123|SmallThetaAhrensDieterMarsagliaTsangGammaSampler|0.986490358942939|
|WELL_44497_B|Single|0.123|WrapperAhrensDieterMarsagliaTsangGammaSampler|0.956943949458215|
|WELL_44497_B|Single|0.51|SmallThetaAhrensDieterMarsagliaTsangGammaSampler|1|
|WELL_44497_B|Single|0.51|AhrensDieterMarsagliaTsangGammaSampler|0.95399468154945|
|WELL_44497_B|Single|0.51|WrapperAhrensDieterMarsagliaTsangGammaSampler|0.946443478303293|
|WELL_44497_B|Single|0.9876|AhrensDieterMarsagliaTsangGammaSampler|1|
|WELL_44497_B|Single|0.9876|WrapperAhrensDieterMarsagliaTsangGammaSampler|0.99990437489302|
|WELL_44497_B|Single|0.9876|SmallThetaAhrensDieterMarsagliaTsangGammaSampler|0.994256981087679|
|WELL_44497_B|Single|2.456|WrapperAhrensDieterMarsagliaTsangGammaSampler|1|
|WELL_44497_B|Single|2.456|AhrensDieterMarsagliaTsangGammaSampler|0.998163937087658|
|WELL_44497_B|Single|2.456|LargeThetaAhrensDieterMarsagliaTsangGammaSampler|0.970031062022198|
|WELL_44497_B|Single|60.9|AhrensDieterMarsagliaTsangGammaSampler|1|
|WELL_44497_B|Single|60.9|WrapperAhrensDieterMarsagliaTsangGammaSampler|0.987692179332812|
|WELL_44497_B|Single|60.9|LargeThetaAhrensDieterMarsagliaTsangGammaSampler|0.986447400523962|
I'd say that this level of difference for both single use and repeat use is
just noise. The fastest is not consistent so this is not an improvement. I'll
not pursue this further.
I will create the PR for the PoissonSamplerCache.
> PoissonSampler single use speed improvements
> --------------------------------------------
>
> Key: RNG-50
> URL: https://issues.apache.org/jira/browse/RNG-50
> Project: Commons RNG
> Issue Type: Improvement
> Affects Versions: 1.0
> Reporter: Alex D Herbert
> Priority: Minor
> Attachments: PoissonSamplerTest.java, jmh-result.csv
>
>
> The Sampler architecture of {{org.apache.commons.rng.sampling.distribution}}
> is nicely written for fast sampling of small dataset sizes. The constructors
> for the samplers do not check the input parameters are valid for the
> respective distributions (in contrast to the old
> {{org.apache.commons.math3.random.distribution}} classes). I assume this is a
> design choice for speed. Thus most of the samplers can be used within a loop
> to sample just one value with very little overhead.
> The {{PoissonSampler}} precomputes log factorial numbers upon construction if
> the mean is above 40. This is done using the {{InternalUtils.FactorialLog}}
> class. As of version 1.0 this internal class is currently only used in the
> {{PoissonSampler}}.
> The cache size is limited to 2*PIVOT (where PIVOT=40). But it creates and
> precomputes the cache every time a PoissonSampler is constructed if the mean
> is above the PIVOT value.
> Why not create this once in a static block for the PoissonSampler?
> {code:java}
> /** {@code log(n!)}. */
> private static final FactorialLog factorialLog;
>
> static
> {
> factorialLog = FactorialLog.create().withCache((int) (2 *
> PoissonSampler.PIVOT));
> }
> {code}
> This will make the construction cost of a new {{PoissonSampler}} negligible.
> If the table is computed dynamically as a static construction method then the
> overhead will be in the first use. Thus the following call will be much
> faster:
> {code:java}
> UniformRandomProvider rng = ...;
> int value = new PoissonSampler(rng, 50).sample();
> {code}
> I have tested this modification (see attached file) and the results are:
> {noformat}
> Mean 40 Single construction ( 7330792) vs Loop construction
> (24334724) (3.319522.2x faster)
> Mean 40 Single construction ( 7330792) vs Loop construction with static
> FactorialLog ( 7990656) (1.090013.2x faster)
> Mean 50 Single construction ( 6390303) vs Loop construction
> (19389026) (3.034132.2x faster)
> Mean 50 Single construction ( 6390303) vs Loop construction with static
> FactorialLog ( 6146556) (0.961857.2x faster)
> Mean 60 Single construction ( 6041165) vs Loop construction
> (21337678) (3.532047.2x faster)
> Mean 60 Single construction ( 6041165) vs Loop construction with static
> FactorialLog ( 5329129) (0.882136.2x faster)
> Mean 70 Single construction ( 6064003) vs Loop construction
> (23963516) (3.951765.2x faster)
> Mean 70 Single construction ( 6064003) vs Loop construction with static
> FactorialLog ( 5306081) (0.875013.2x faster)
> Mean 80 Single construction ( 6064772) vs Loop construction
> (26381365) (4.349935.2x faster)
> Mean 80 Single construction ( 6064772) vs Loop construction with static
> FactorialLog ( 6341274) (1.045591.2x faster)
> {noformat}
> Thus the speed improvements would be approximately 3-4 fold for single use
> Poisson sampling.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)