2014-08-27 137 views
0

我目前在串行(单核)/并行(48核)上运行fortran代码,并且输出中存在诸如“infinity”或“NaN”没有任何其他信息)。我想使用编译器选项来帮助我找到无穷大/ NaN的来源。我尝试了“-O0 -g -traceback -fpe3”的组合,然后在运行期间,在比正常情况(无调试选项)的情况下出现更早的无穷大。但是,仍然没有关于源代码中的哪一行导致此类行为的信息。所以,我想知道,有没有可用的编译器选项可以帮助我找到无穷大/ NaN的来源?或者我使用正确的标志组合?关于英特尔Fortran编译器选项的问题

在此先感谢! =)

+2

你可以尝试通过类似'gdb'或'idb'的调试器来运行你的代码。 – 2014-08-27 19:05:51

+2

https://software.intel.com/en-us/forums/topic/267945 – agentp 2014-08-27 19:34:15

+0

感谢您的上述建议!我会试试看看它是否有效。 – elfsummer 2014-08-27 21:11:44

回答

2

fpe选项是正确的想法!但是您使用了错误的编号:根据Intel Fortran Compiler documentation,当fpe之后的整数为3时:

所有浮点异常都被禁用。浮点下溢 是渐进式的,除非您明确指定编译器选项 将IA-32和 Intel EM64T系统上的-ftz或/ Qftz,O3或O2启用清零。此设置提供完整的IEEE支持。

您需要使用-fpe0,这会导致:

浮点无效,除以零和溢出的例外是启用 。如果发生任何此类异常,则中止执行。此 选项设置-ftz(Linux和Mac OS)或/ Qftz(Windows)选项; 因此,下溢结果将被设置为零,除非您明确指定 指定-no-ftz(Linux和Mac OS)或/ Qftz-(Windows)。在 基于Itanium®的系统上,下溢行为等同于指定 选项-ftz或/ Qftz。