【问题标题】:Same Results in Same Machines - Different Results across Different Machines/OS using MATLAB Parallel Environment相同机器中的相同结果 - 使用 MATLAB 并行环境在不同机器/操作系统中的不同结果
【发布时间】:2017-10-06 22:13:29
【问题描述】:

我很确定在我的 PC 中分析我的数据时,我正确地控制了随机数生成器。然而,当我将脚本放在另一台服务器上运行时,我得到了不同的结果。我认为我的代码是正确的原因是因为我在机器内具有完全的可重复性。在相同的机器上总是有相同的结果!使用服务器时的不同结果...

  • 我的电脑有 Windows 和一个 Intel i7(4 核),而服务器有 Linux 和一个 Intel XEON(8 核)。

我已经彻底阅读了有关 parfor 的文档,我正在做的是根据迭代编号和不是工作人员 ID 在每次迭代中分配一个特定的子流编号。

即使尝试在 8 核机器上创建一个具有相同数量的工人 (4) 的池,我仍然得到不同的结果...

这里是使用的基本代码,没有不相关的细节。

myCluster = parcluster('local'); myCluster.NumWorkers = 4;
saveProfile(myCluster); parcluster('local')
parpool('local', 4)

spmd
  rng(0,'combRecursive');
end

parfor iter = 1:10
  stream = RandStream.getGlobalStream();
  stream.Substream = (iter);
  ...
  ...
end

【问题讨论】:

  • 请编辑您的问题并以纯文本格式上传您的代码,而不是您的代码图像。
  • 抱歉,这是我的第一篇文章,仍在尝试弄清楚它是如何工作的!
  • 欢迎来到 Stack Overflow!您可以访问Help Center 开始使用。干杯。
  • 你确定随机数不同吗?您的不同结果有何不同?
  • 是的,我确信它们是不同的,而且它们的不同足以让我无法建议其他人运行我的脚本并获得“相同”的结果!实验中的统计意义有时有点脆弱......

标签: matlab random parallel-processing parfor


【解决方案1】:

您确定这是 parfor 和并行运行代码所独有的吗?通常,由于系统和第 3 方库跨操作系统使用的优化不同,MATLAB 不能保证在不同操作系统上给出逐位相同的答案。此外,如果这两个系统具有不同的处理器架构,那么您获得逐位相同答案的可能性就更小了,因为每个处理器的指令集都会有不同的优化。

【讨论】:

  • 在尝试尽可能多地分解代码以查明我从哪里开始出现差异之后,我最终想到了同样的事情......我正在使用爬山方法,有很多有很多数字的计算,所以也许你是对的。我的意思是这是我迄今为止唯一的猜测。
猜你喜欢
  • 2020-06-23
  • 1970-01-01
  • 2016-11-08
  • 2021-08-21
  • 2022-12-09
  • 2012-08-19
  • 1970-01-01
  • 1970-01-01
  • 2021-10-20
相关资源
最近更新 更多