gpt4 book ai didi

Fortran:使用两种不同编译器编译的生成代码之间的差异

转载 作者:行者123 更新时间:2023-12-04 23:31:12 34 4
gpt4 key购买 nike

我必须处理一个 fortran 程序,该程序曾经使用 Microsoft Compaq Visual Fortran 6.6 编译。我更喜欢使用 gfortran,但我遇到了很多问题。
主要问题是生成的二进制文件具有不同的行为。我的程序需要一个输入文件,然后必须生成一个输出文件。但有时,在使用 gfortran 编译的二进制文件时,它会在结束之前崩溃,或者给出不同的数值结果。
这是一个由研究人员编写的程序,它使用了大量的浮点数。

所以我的问题是:这两个编译器之间有什么区别可能会导致这种问题?

编辑:
我的程序计算了一些参数的值,并且有很多迭代。一开始,一切都很顺利。经过多次迭代,出现一些 NaN 值(仅当由 gfortran 编译时)。

编辑:
想想你们每个人的答案。
所以我使用了英特尔编译器,它通过提供一些有用的错误消息来帮助我。
我的问题的根源是某些变量没有正确初始化。看起来在使用 compaq visual fortran 编译时,这些变量自动将 0 作为值,而使用 gfortran(和 intel)时,它采用随机值,这解释了在以下迭代中加起来的一些数值差异。
所以现在的解决方案是更好地理解程序来纠正这些缺失的初始化。

最佳答案

不同的编译器可以为相同的源代码发出不同的指令。如果数值计算在工作边界上,则一组指令可能有效,而另一组则无效。大多数编译器都可以选择使用更保守的浮点算法,而不是速度优化——我建议检查您正在使用的编译器选项以获取可用选项。更根本的是,这个问题——特别是编译器在几次迭代中都同意但随后出现分歧——可能表明程序的数值方法处于临界状态。一个简单的解决方案是提高计算的精度,例如,从单精度到 double 。也许还可以调整参数,例如步长或类似参数。更好的方法是对算法有更深入的了解,并可能做出更根本的改变。

关于Fortran:使用两种不同编译器编译的生成代码之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4962527/

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