gpt4 book ai didi

c++ - 如何控制 Microsoft C 运行时库使用的 CPU 指令?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:22:10 24 4
gpt4 key购买 nike

是否可以控制 MS C 运行时库(Visual Studio 2013、2015)使用哪些 CPU 指令集?如果我进入 cos() 的反汇编程序,代码将与一组预先计算的 CPU 功能进行比较,然后使用 CPU 上可用的“最佳”功能执行该功能。问题在于不同的指令集产生不同的结果,因此结果因 CPU 架构而异。

例如,构建一个 64 位可执行文件:

std::cout << std::setprecision(20) << cos(-0.61385470201194381) << std:: endl;

在 Haswell/Broadwell 上,之后返回 0.81743370050726594(与 x86 相同)。在旧 CPU 上返回 0.81743370050726583。

运行时库使用 FMA instruction set如果可用,执行不同的实现并产生不同的结果。请注意,这不受应用程序中选择的编译器选项的影响,因为运行时库是预编译的。还要注意浮点精度控制函数_controlfp() cannot control 64 位运行时的精度。

是否可以控制运行时库使用哪些指令集,以便结果更具确定性?

最佳答案

Is it possible to control which instruction sets the Runtime Library uses so that the results can be more deterministic?

没有。

如果你只使用基本算术(+,-,*,/,sqrt ),并强制你的编译器使用严格的 IEEE754 算法,那么它应该是完全可重现的。对于其他函数,例如 cos,您将受 libm 的支配,不需要提供任何准确性保证。您还会在 BLAS 库中看到类似的问题。

如果您需要完美的再现性,您有 2 条途径:

  1. 使用正确舍入的数学库,例如 CRlibm (虽然我不认为像 pow 这样的 2 参数函数已经被证明是正确的)。
  2. 滚动您自己的数学函数,将自己限制在上述算术运算(在这种情况下,fdlibm 可能是一个好的开始)。

关于c++ - 如何控制 Microsoft C 运行时库使用的 CPU 指令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35123765/

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