我目前在串行(单核)/并行(48核)上运行fortran代码,输出中有“无限”或“NaN”等值(不应该有)没有任何其他信息。我想使用编译器选项来帮助我找到infinity / NaN的来源。我尝试了“-O0 -g -traceback -fpe3”的组合,然后在运行期间,无穷大出现在这种情况下比正常情况更早(没有调试选项)。但是,仍然没有关于源代码中哪一行导致此类行为的信息。所以,我想知道,是否有任何可用的编译器选项可以帮助我找到无限/ NaN的来源?或者我使用正确的旗帜组合?
提前致谢! =)
答案 0 :(得分:2)
fpe
选项是正确的选择!但你使用了错误的数字:根据Intel Fortran Compiler documentation,当fpe之后的整数是3:
禁用所有浮点异常。浮点下溢 是渐进的,除非你明确指定一个编译器选项 在IA-32和/或IA-32上启用齐平到零,例如-ftz或/ Qftz,O3或O2 英特尔EM64T系统。此设置提供完整的IEEE支持。
您需要使用-fpe0,结果是:
浮点无效,被零除和溢出异常 启用。如果发生任何此类异常,则中止执行。这个 选项设置-ftz(Linux和Mac OS)或/ Qftz(Windows)选项; 因此,除非您明确说明,否则下溢结果将设置为零 指定-no-ftz(Linux和Mac OS)或/ Qftz-(Windows)。上 基于Itanium®的系统,下溢行为等同于指定 选项-ftz或/ Qftz。