相同机器中的相同结果 - 使用MATLAB并行环境在不同机器/ OS之间的不同结果

时间:2017-05-08 19:15:41

标签: matlab random parallel-processing parfor

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

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

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

即使尝试在8核机器中创建具有相同数量的worker(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

1 个答案:

答案 0 :(得分:0)

您确定这是parfor并行并行运行代码所特有的吗?一般而言,MATLAB不能保证在不同的操作系统上提供逐位相同的答案,因为系统和第三方库在操作系统中使用的优化程度不同。此外,如果两个系统具有不同的处理器体系结构,那么您就不太可能获得逐位相同的答案,因为每个处理器的指令集会有不同的优化。