在parfor-Loops中重复随机数
如在控制工人上的随机数流,集群中每个工作在同一作业上的工作者都有一个独立的随机数生成器流。因此,默认情况下,池中的每个工作器,以及中的每个迭代parfor
-loop有一组唯一的、独立的随机数。的后续运行parfor
-循环生成不同的数字。
在一个parfor
-loop,您不能控制迭代执行的顺序,也不能控制哪个worker运行哪个迭代。所以即使你重置随机数生成器,这个parfor
-loop可以以不同的顺序生成相同的值。
再现一组相同的随机数parfor
每次循环运行时,你必须通过为每次迭代分配一个特定的子流来控制随机生成。
首先,使用支持子流的生成器创建想要使用的流。将流创建为parallel.pool.Constant
允许所有工作人员访问流。
sc = parallel.pool.Constant(RandStream)“Threefry”))
在parfor
-loop,可以通过循环索引设置子流索引。这确保了每个迭代都使用其特定的随机数集,而不管哪个工作者运行迭代或迭代在哪个序列中运行。
R = 0 (1,16);parfori = 1:16 stream = sc.Value;从常量中提取流流。子流= i;R (i) = rand(流);结束r
r =第1列至第8列0.3640 0.8645 0.0440 0.7564 0.5323 0.8075 0.2145 0.9128第9列至第16列0.4057 0.0581 0.5515 0.4347 0.3531 0.4677 0.8287 0.2312