I have a parfor
loop for parallel computing in Matlab
. I want have different random numbers in every calling of these parfor
loops on 8 workers. If i don't use rng('shuffle')
function i have same random number for randperm(10)
. In this case my code run rng('shuffle')
function before randperm
at the same time in all workers. Have i different random numbers in this condition? when I see randperm
outputs in parfor loop, Some of these outputs are same !
I need save rng
before rng('shuffle')
and use something likes rng(saved_rng)
after ending parallel loop?
We have this in Matlab
help :
Note Because rng('shuffle') seeds the random number generator based on the current time, you should not use this command to set the random number stream on different workers if you want to assure independent streams. This is especially true when the command is sent to multiple workers simultaneously, such as inside a parfor, spmd, or a communicating job. For independent streams on the workers, use the default behavior; or if that is not sufficient for your needs, consider using a unique substream on each worker.
So what should i do? Have I different random numbers if i delete rng
? I have two versions of these codes. One of them is calculation with parfor
and other using for
loop, Can i remove shuffle
from for
loop? I have different random numbers in this condition?
Thanks.
Ps.
I can have these structures:
parfor I=1:X
xx = randperm(10)
end
parfor I=1:X
rng('shuffle');
xx = randperm(10)
end
rng('shuffle');
parfor I=1:X
xx = randperm(10)
end
I want have different random numbers from randperm
function. How can I do that? for for
structure i need shuffle
function (without it the random numbers are the same) but when i add it to parfor
some random outputs of randperm
are the same !