JuliaRandom / JuliaRandom/RandomNumbers.jl

Question on RNGs for use in parallel simulations

オープン
#37 コメント 4 件 リアクション 0 件 担当者 0 名 GitHub で見る
主要言語
Julia
スター
100
フォーク
23
PR マージ指標
30日以内にマージされた PR はありません

説明

This is a question rather than an issue. I hope that's OK to ask here.

I would like to use a RNG for parallel simulations, and so want statistically independent RNGs for each worker process.

For `Base.Random.MersenneTwister`, I use something like this:
```
rng = Base.Random.MersenneTwister(0)
rngseed = Base.Random.make_seed()
srand(rng, rngseed)

rngs = randjump(rng, numtrials)

f(trial, rng) = ...
pmap(f, 1:numtrials, rngs)
```

I would like to use a RNG from the `Random123` family.
Is this a good choice for parallel sims?

My code would be something like:
```
rng = RandomNumbers.Random123.Threefry4x()
rngseed = RandomNumbers.gen_seed(rng)
srand(rng, rngseed)

rngs = Vector{typeof(rng)}(numtrials)
for trial = 1:numtrials
rngs[trial] = copy(rng)
RandomNumbers.Random123.set_counter!(rngs[trial], trial)
end

f(trial, rng) = ...
pmap(f, 1:numtrials, rngs)
```

Is using `set_counter!` this way the right approach to give independent RNGs?
Will it work for all RNGs in the Random123 family?
Why would I choose 2x or 4x version?
Which particular RNG would you recommend?

コントリビューションガイド

このリポジトリのコントリビューションガイドは索引されていません

評価

この issue はまだ評価されていません。

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。