同一台机器上的相同结果 - 使用 MATLAB 并行环境在不同的 Machines/OS 上产生不同的结果
Same Results in Same Machines - Different Results across Different Machines/OS using MATLAB Parallel Environment
我很确定在我的 PC 中分析我的数据时我正确地控制了随机数生成器。然而,当我将脚本放入另一台服务器的 运行 时,我得到了不同的结果。我认为我的代码正确的原因是因为我在一台机器内具有完全的可重复性。始终在同一台机器上获得相同的结果!使用服务器时的不同结果...
- 我的 PC 有 Windows 和一个 Intel i7(4 核),而服务器有 Linux 和一个 Intel XEON(8 核)。
我已经非常彻底地阅读了有关 parfor 的文档,我正在做的是根据迭代次数和 not 在每次迭代中分配一个特定的 Substream 编号worker 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
您确定这是 parfor 和 运行 并行代码所独有的吗?通常,由于系统和第 3 方库跨操作系统使用不同的优化,MATLAB 不能保证在不同的操作系统上给出逐位相同的答案。此外,如果两个系统具有不同的处理器架构,则您获得逐位相同答案的可能性就更小了,因为每个处理器的指令集都会有不同的优化。
我很确定在我的 PC 中分析我的数据时我正确地控制了随机数生成器。然而,当我将脚本放入另一台服务器的 运行 时,我得到了不同的结果。我认为我的代码正确的原因是因为我在一台机器内具有完全的可重复性。始终在同一台机器上获得相同的结果!使用服务器时的不同结果...
- 我的 PC 有 Windows 和一个 Intel i7(4 核),而服务器有 Linux 和一个 Intel XEON(8 核)。
我已经非常彻底地阅读了有关 parfor 的文档,我正在做的是根据迭代次数和 not 在每次迭代中分配一个特定的 Substream 编号worker 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
您确定这是 parfor 和 运行 并行代码所独有的吗?通常,由于系统和第 3 方库跨操作系统使用不同的优化,MATLAB 不能保证在不同的操作系统上给出逐位相同的答案。此外,如果两个系统具有不同的处理器架构,则您获得逐位相同答案的可能性就更小了,因为每个处理器的指令集都会有不同的优化。