我开发了一个FORTRAN代码,我使用以下命令编译:
ifort -g -O0 -openmp -openmp_report -threads -ipo
使用上述标志运行此代码时,在运行串行和并行(OpenMP)时,我将结果保留为15位数。我还查看了英特尔Inspector 2013 - 我没有任何数据竞争条件。
然而,当我将优化编译标志更改为-O2
或-O3
时,我得到一个小错误,该错误随着时间的推移而增长(它是一个随时间积分的模拟),从{{ 1}}朝着更大的数字。
10^15
或-O2
中的任何一个的结果都不同(最多为点后的第五个数字)。
任何人都可以建议我如何改进我的代码,使其以与-O3
标志相同的精度(双精度)运行?
提前致谢, 插口。