gpt4 book ai didi

c++ - 不同计算机之间的 C++ 行为不一致

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:45:16 25 4
gpt4 key购买 nike

我已经实现了一个 C++ 解决方案,用于测试对一系列随机事件使用react的各种策略。我正在汇总在几台计算机上运行的多线程模拟的结果。

单个模拟会产生一个整数结果,通常需要生成大约 100 个统一的随机整数,并在保存一大块聚合数据(平均值、标准差、最小值、最大值)之前重复 1,000,000 次。尽管在给定架构上,此类 block 的结果在 6 位有效数字上是一致的,但运行完全相同程序的两台计算机之间的差异要大几个数量级。

到目前为止,我在两台配备英特尔处理器的个人 Windows 笔记本电脑和一个 AWS c3.8xlarge Windows Server 实例上运行了该程序(相同的可执行文件)。在每台计算机上,正在进行的模拟很快就会接近一个不同的值。均值之间的相对差异约为 10^-3。在一台计算机上,100 万个 block 之间的均值相对差异很少超过 10^-6。

该程序使用 mt19937来自 <random> 的随机数生成器.我用 time(NULL)用于播种。

我想不出这种不一致的原因。 Mersenne Twister 被认为是用于蒙特卡罗模拟的声音发生器,我多次使用它,经常能够分析验证结果。我可以理解由于生成器的缺陷和底层架构而导致的细微差异和偏离一致性,但如此大的数量级,很难理解。

最佳答案

经过重构程序,剔除不必要的操作,结果在不同主机之间变得一致。似乎舍入误差在各种看似相似的 64 位架构之间存在显着差异,并且由于某些设计缺陷,它们的累积导致我的模拟结果出现严重差异。我要感谢@DanielKO、@TonyD、@amdn 和@Yakk 提出的宝贵建议。

一个有趣的注意事项:从一开始,c3.8xlarge AWS 实例始终提供相同(正确)的结果。相反,Core 2 遭受的打击最为严重。

关于c++ - 不同计算机之间的 C++ <random> 行为不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22726485/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com