主要内容

在parfor循环中重复随机数

中描述的控制工人上的随机数流,集群中的每个工作于同一作业的worker都有一个独立的随机数生成器流。因此,在默认情况下,池中的每个worker和parfor-loop有一个唯一的、独立的随机数集。程序的后续运行parfor-loop生成不同的数字。

在一个parfor-loop,你不能控制迭代执行的顺序,也不能控制哪个worker运行哪个迭代。所以即使你重置了随机数生成器parfor-loop可以在不同的序列中生成相同的值。

在a中复制同一组随机数parfor-loop每次循环运行时,必须通过为每个迭代分配特定的子流来控制随机生成。

首先,使用支持子流的生成器创建您想要使用的流。金宝app将流创建为parallel.pool.Constant允许所有工作人员访问流。

sc = parallel.pool.Constant (RandStream (“Threefry”))

parfor-loop,可以通过环路索引设置子流索引。这确保了每个迭代都使用其特定的随机数集,而不管哪个工作人员运行该迭代或运行哪个序列迭代。

r = 0 (16);parfori = 1:16 stream = sc.Value;从常量中提取流流。Substream =我;r (i) =兰德(流);结束r
r = column 1 to 8 0.3640 0.8645 0.0440 0.7564 0.5323 0.8075 0.2145 0.9128 column 9 to 16 0.4057 0.0581 0.5515 0.4347 0.3531 0.4677 0.8287 0.2312

另请参阅

|

相关的话题