我有一个parfor用于并行计算的循环Matlab。我希望parfor在 8 个工作人员的每次调用这些循环中都有不同的随机数。如果我不使用rng('shuffle')函数,我有相同的随机数randperm(10)。在这种情况下,我的代码在所有工作人员中同时运行rng('shuffle')之前的功能。randperm在这种情况下我有不同的随机数吗?当我在 parfor 循环中看到randperm输出时,其中一些输出是相同的!
我需要rng先保存并在结束并行循环后rng('shuffle')使用类似的东西?rng(saved_rng)
我们有这个Matlab帮助:
注意 因为 rng('shuffle') 会根据当前时间为随机数生成器播种,所以如果要确保独立流,则不应使用此命令在不同的 worker 上设置随机数流。当命令同时发送给多个工作人员时尤其如此,例如在 parfor、spmd 或通信作业中。对于worker上的独立流,使用默认行为;或者,如果这不足以满足您的需求,请考虑在每个工作人员上使用唯一的子流。
所以我该怎么做?如果我删除,我有不同的随机数rng吗?我有这些代码的两个版本。其中之一是计算parfor和其他使用for循环,我可以shuffle从for循环中删除吗?在这种情况下我有不同的随机数?
谢谢。
附言。
我可以有这些结构:
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
我想从randperm函数中获得不同的随机数。我怎样才能做到这一点?对于for结构我需要shuffle函数(没有它,随机数是相同的)但是当我将它添加到parfor一些随机输出时randperm是相同的!