# Random number and parallel execution

**URL:** <https://discourse.julialang.org/t/random-number-and-parallel-execution/57024>\
**Category:** New to Julia\
**Created:** [March 12, 2021, 1:52pm UTC](https://discourse.julialang.org/t/random-number-and-parallel-execution/57024 "2021-03-12T13:52:54Z")\
**Posts on this page:** 5\
**Page:** 2

<div class="post-metadata">

**Author:** ![greg\_plowman](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/greg_plowman/32/8100_2.png) [@greg\_plowman](https://discourse.julialang.org/u/greg_plowman)\
**Post date:** [March 14, 2021, 9:54pm UTC](https://discourse.julialang.org/t/random-number-and-parallel-execution/57024/21 "2021-03-14T21:54:20Z")

</div>

> [@lmiq](#):
>
> One final thing: is the option of generating the random generator for each thread explicitly bad for any reason?

I think it’s generally fine.

Explicitly passing an RNG to sim code is useful is you want:

- Reproducibility

- Option of using a different type of RNG (e.g. [GitHub - JuliaRandom/RandomNumbers.jl: Random Number Generators for the Julia Language.](https://github.com/sunoru/RandomNumbers.jl))

---

<div class="post-metadata">

**Author:** ![giordano](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/giordano/32/2166_2.png) [@giordano](https://discourse.julialang.org/u/giordano)\
**Post date:** [March 14, 2021, 9:59pm UTC](https://discourse.julialang.org/t/random-number-and-parallel-execution/57024/22 "2021-03-14T21:59:16Z")

</div>

I’d also add testing (which is kind of related to reproducibility): [`StableRNGs.jl`](https://github.com/JuliaRandom/StableRNGs.jl) is very useful to test packages across multiple minor versions of Julia, since the default RNG can (and did) change the stream of generated numbers from version to version. Having a mechanism to easily pass the RNG is very important.

---

<div class="post-metadata">

**Author:** ![Oscar\_Smith](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/oscar_smith/32/25343_2.png) [@Oscar\_Smith](https://discourse.julialang.org/u/Oscar_Smith)\
**Post date:** [March 14, 2021, 10:00pm UTC](https://discourse.julialang.org/t/random-number-and-parallel-execution/57024/23 "2021-03-14T22:00:29Z")

</div>

The other option is to wait until 1.7 and hope [https://github.com/JuliaLang/julia/pull/34852](https://github.com/JuliaLang/julia/pull/34852) gets in. If it does, (and I understand it correctly) it should fix the speed of `rand()` without passing the `rng` (and be faster since it uses a faster `rng` also)

---

<div class="post-metadata">

**Author:** ![lmiq](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/lmiq/32/18314_2.png) [@lmiq](https://discourse.julialang.org/u/lmiq)\
**Post date:** [March 14, 2021, 10:13pm UTC](https://discourse.julialang.org/t/random-number-and-parallel-execution/57024/24 "2021-03-14T22:13:01Z")

</div>

+1 , I’m using that already.

---

<div class="post-metadata">

**Author:** ![tkf](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tkf/32/17635_2.png) [@tkf](https://discourse.julialang.org/u/tkf)\
**Post date:** [March 15, 2021, 12:13am UTC](https://discourse.julialang.org/t/random-number-and-parallel-execution/57024/25 "2021-03-15T00:13:52Z")

</div>

FYI, I just added a section discussing a couple of approaches for using RNG in FLoops.jl documentation: [How to do X in parallel? · FLoops](https://juliafolds.github.io/FLoops.jl/dev/howto/parallel/#Efficient-and-reproducible-usage-patterns-of-random-number-generators). Some approaches are generic (don’t need a particular package) and one requires something like FLoops.jl (esp. a new release [https://github.com/JuliaRegistries/General/pull/31964](https://github.com/JuliaRegistries/General/pull/31964)).

[Previous page](https://discourse.julialang.org/t/random-number-and-parallel-execution/57024.md?page=1)
