1

I am having trouble reproducing a random number from a compiled function with parallelization even with the random seed being set.

Specifically, running the following script should give the same value (the 3-dimensional vector) over time.

SeedRandom[1, Method -> "MersenneTwister"];
f = Compile[{{x, _Real}},
   RandomReal[x]
   ,
   CompilationTarget -> "C", RuntimeOptions -> "Speed", 
   RuntimeAttributes -> {Listable}, Parallelization -> True
   ];
args = Range[3];
f[args]

However, I first got {0.0607303, 0.00332708, 2.55753} first. Next time {0.468316, 0.0823131, 1.02696} after I quit the kernel in between.

I tried the same thing with SeedRandom[1, Method -> "ParallelMersenneTwister"];, SeedRandom[1, Method -> "ExtendedCA"];, etc., and other seed numbers, which did not help.

Removing Parallelization -> True would resolve the issue, but

(1) is there any way to get the random seed to work properly in compiled, parallelized functions; and

(2) could someone explain how parallelization works when it comes to random number generation?

Kohei
  • 11
  • 1

0 Answers0