1

这段代码愉快地嗡嗡作响了很长一段时间,直到我们最近发现了一个边缘情况,它静默失败——没有返回错误。失败显然非常微妙。我们可以通过以下方式让代码在边缘情况下平稳运行:

1) 使用任何包含-traceback或调试 (-g-gopt) 的选项集进行编译;

2) 编译-fast -Mnounroll

3) 编译优化<2;

4)在代码中加入WRITE语句来判断失败的位置;

换句话说,大多数对调试故障有用的工具——实际上会导致故障消失。

我正在调查与循环展开或其他优化相关的失败及其解决方案的任何信息。

谢谢大家。

4

1 回答 1

0

我不熟悉 pgf(哎呀,自从我使用任何 fortran 以来已经 10 年了),但这里有一些跟踪(潜在)编译器错误的一般建议:

  1. 简化可重现的案例。即,尝试用一段相似的代码重现问题,该代码已删除所有多余的细节。这很有帮助,因为 a) 您将不会对公开发布代码犹豫不决,并且 b) 如果有人试图诊断问题,那么他们会更容易使用较少的周围材料。

  2. 与专家交谈:如果您有 pgf 的支持合同,请使用它!他们的网站上有一个支持请求表。如果没有,有一个用户论坛部分,您可以在其中发布您的信息 - 其他人可能有更好的解决方法,或者那里的员工可能能够记录您的问题。

  3. 仔细检查您的代码。您是否有可能依赖某种未指定的行为?这种情况会导致您的程序在更改优化级别时切换行为。我并不是说编译器错误是不可能的,但它也可能是你的代码中的一个黑客。

希望这会有所帮助。

于 2011-01-25T06:29:35.637 回答