Windows 更新/补丁会影响工程软件的计算结果吗?

Windows 更新/补丁会影响工程软件的计算结果吗?

我在一家工程公司工作,该公司严重依赖 Windows 7 软件(MATLAB、ANSYS、内部编写的 Fortran 代码)产生的数学计算结果的准确性。最近我被分配到一个小组,负责确保 Windows 上的软件不会受到 Windows 更新/补丁的负面影响。我被告知进行这些检查的原因是操作系统的更新可能会改变我们使用的软件的算术结果。据说过去 Unix/Linux 上的软件受到内核更新的影响时出现了问题。

我的问题的第一部分是,通过补丁、服务包、较新的 .NET 框架版本等更新 Windows 7 有多大可能(或者甚至有可能)改变软件执行的数学计算结果?对计算结果的任何更改是否可能大于典型的舍入误差?理想情况下,每个软件都会运行一组测试用例,但对每个 Windows 补丁都进行测试并不真正节省时间或成本。

第二部分,有没有建议如何轻松检查 Windows 更新是否导致了可能影响我们软件结果的更改?如上所述,对每个软件运行全套测试并不是很可行,我认为我们当前的流程可以大大改进。

我还想知道其他工程公司,尤其是核能和航天等受监管行业的公司如何处理这个问题,以确保 Windows 软件为工程计算产生预期结果。他们是否还担心每次更新 Windows 都会开始给他们不同的计算值?我真的不确定在负责任地检查我们的计算和过度偏执之间应该划一条界线。

答案1

.NET JIT 可以更新以更积极地优化浮点运算。

如果操作系统更新支持较新的指令集(如 AVX2),这也可能会改变 IL 的即时编译方式。

我认为 JIT 更新并不罕见。他们可能不会将 JIT 更新放入安全更新中,但如果发现从 .NET 4.5.0 到 4.5.1 的更新,我也不会感到惊讶。

事实上,新的 RyuJIT 将在下一个 .NET 版本中默认启用。

除了整数之外,IEEE 算术指令的执行无需操作系统参与。它们的结果是精确指定的(包括浮点运算)。

相关内容