dummy-link

RNGPool

A pool of random number generators for multi-threaded applications

Readme

RNGPool.jl

Build Status Build status Coverage Status codecov.io

This package provides a simple interface for thread-specific random number generators (RNGs).

Currently, Threefry4x RNGs are used, as implemented in RandomNumbers.jl.

At runtime, a Vector of Threads.nthreads() RNGs is initialized when the package is loaded.

Calling getRNG() will return the RNG associated to the thread on which it is called.

Calling setRNGs(v::Int64) sets the RNGs so that output is reproducible.

Example usage:

using RNGPool

# on return, each element of out is the average of many Uniform(0,1) pseudo-random variates
function foo!(out::Vector{Float64}, N::Int64)
  nt = Threads.nthreads()
  M::Int64 = div(N, nt)
  Threads.@threads for i in 1:nt
    rng::RNG = getRNG()
    v::Float64 = 0.0
    for j in 1:M
      v += rand(rng)
    end
    out[i] = v / M
  end
end

nt = Threads.nthreads()
out = Vector{Float64}(undef, nt)

setRNGs(1)

N0 = 2^25
foo!(out, N0)

Big Crush Output with 16 threads:

$ julia -O3 test/bigCrush.jl
Testing circular RNG with 16 threads
20297.402768 seconds (3.13 M allocations: 169.970 MiB, 0.00% gc time)

Big Crush p-values:

0.35024617233125155
0.8835532763583632
0.6636497877293779
0.018903942941190053
0.5169888091502591
0.48459348174551337
0.7209339139632519
0.4953826520232639
0.9024402475518911
0.5
0.8651926099525509
0.9561154784011432
0.8376321650399638
0.6202341415528604
1.799269319133724e-5
0.8859876568914304
0.22492814670245764
0.3927173570756824
0.4520844575203478
0.8986304417260517
0.038014481966689814
(0.21568858056919513, 0.7389715767238474, 0.9076375138182249, 0.5966883110300443)
(0.2431181574370577, 0.4871669809334896, 0.3231521924042511, 0.9215267021031692)
(0.9712727839965605, 0.33191575846120747, 0.8321392860558294, 0.576450918419529)
(0.8079223429884855, 0.29902676017610325, 0.274672277693068, 0.44596300957381135)
0.6406462673625273
0.5723208292533664
0.8517476719247175
0.6738959447126625
0.3204715210910115
0.033925233014120204
0.8307482626649948
0.5202223295545486
0.0730899510030465
0.9884621513805903
0.5504918111758579
0.07592255377356572
0.8106929224255082
0.9299569648871202
0.7816015502299919
0.6981399845286156
0.11180741408148176
0.5692101750490258
0.6676474222753446
0.8746415962396613
(0.5115042482198283, 0.4466981107162864)
(0.8441064470045998, 0.450098214225219)
(0.5011236928371351, 0.846882944835641)
(0.6052083611219846, 0.11989197241692676)
0.8706050732302925
0.24992576811155562
0.7599705315327361
0.6666798516789317
0.5865513095444427
0.18220660197484762
0.5861954650088912
0.5164889795925813
0.06519595125937305
0.8299875918826629
0.5325072810883595
0.36774868494116086
0.7265016150707939
0.7021869190099859
0.5366819723353544
0.8444332494141247
0.882916216172351
0.49723779059378237
0.2548676909227585
0.2604060378981502
0.6764645024999533
0.9948541696689198
0.5924658062980863
0.42134891840784894
(0.3413158471198531, 0.34416968317789554, 0.2394729304126597, 0.6245575765098257, 0.09818457402629566)
(0.6650635533444043, 0.24782138623974148, 0.743574533545167, 0.27541332372772076, 0.6128708321231922)
(0.9821876686695014, 0.0849037720959841, 0.33329997993956706, 0.2298794954495592, 0.5169204798676033)
(0.5885470974265907, 0.9040681527000856, 0.3897441111991409, 0.22866923396646388, 0.9013466337980678)
(0.21546156684571005, 0.2389096235593432, 0.5139772080346743, 0.6849063061748559, 0.704148823149277)
(0.8876023613895775, 0.5401482944911973, 0.07260663105257459, 0.697180881377814, 0.04297879789302261)
(0.2735042082218486, 0.9303041521766279)
(0.8966399623254027, 0.39194501288887884)
0.1560730722289243
0.22665875528141483
0.9668336806166385
0.6597833962007846
(0.12961526864821815, 0.5)
(0.4598726205050785, 0.6878130593504515)
0.9881687651315975
0.36703506587905493
0.24463319618891602
0.7648482035840278
0.37514384022957814
0.4620117955709462
0.4624403232337113
0.19667608525470504
0.6965966537122446
0.33501810021141654
0.4305745819908624
0.3792369085087328
0.2140086341676749
(0.9753379212091818, 0.1648700050329902)
(0.3586029601856259, 0.36252843463374806)
0.6775217740167053
0.467673260137216
0.925942247194567
0.4705768063135961

Smallest p-value = 1.799269319133724e-5

First Commit

07/21/2018

Last Touched

almost 2 years ago

Commits

17 commits