gpt4 book ai didi

c++ - 浮点运算结果的再现性

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:00:08 26 4
gpt4 key购买 nike

浮点算术运算是否可能在不同的 CPU 上产生不同的结果?我所说的 CPU 是指所有 x86 和 x64。不同的结果我的意思是即使只有一个最不重要的位是不同的。我需要知道我是否可以在项目上使用浮点运算,在不同机器上具有对应于相同输入的完全相同的结果是至关重要的。

编辑:添加了 c++ 标签。
还要澄清一下:我需要可重现的运行时结果。我不希望不同的编译结果相同。

最佳答案

在游戏行业中,这被称为确定性锁步,对于客户端和服务器需要就物理对象(玩家)的状态达成一致的实时网络游戏非常重要、射弹、可变形地形等)。

根据 Glenn Fiedler 关于 Floating Point Determinism 的文章,答案是“可能非常跛行”;如果您在相同的体系结构上运行相同的二进制文件限制使用比基本浮点更不明确的功能,那么您可以获得相同的结果。否则,如果您使用不同的编译器,或者允许您的代码使用 SSE 或 80 位 float ,那么结果将因不同的可执行文件和不同的机器而异。

约瑟夫·克雷宁 recommends :

  • 扫描汇编器输出以进行代数优化并将其应用到您的源代码中;
  • 抑制融合乘加和其他高级指令(例如 sin 三角函数);
  • 并使用 SSE 或 SSE2,或以其他方式将 FPU CSR 设置为 64 位。 (是的,这与 Glenn Fiedler 的建议相冲突。)

当然,在多台不同的机器上测试您的代码;获取中间输出的哈希值,这样您就可以知道您的模拟何时何地出现分歧。

关于c++ - 浮点运算结果的再现性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11952480/

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