optimization - 使用-fast编译时,波特兰组FORTRAN pgf90程序失败,-fast -Mnounroll成功时,

标签 optimization crash fortran pgi

这段代码在很长一段时间里一直欢快地嗡嗡作响,直到我们最近发现一个边缘案例,它无声地失败了-没有错误返回。
失败显然是微妙的。我们可以通过以下方式使代码在边缘情况下正常运行:
1)使用包括-traceback或debug(-g-gopt)的任何选项集进行编译;
2)用-fast -Mnounroll编译;
3)优化时<2进行编译;
4)在代码中添加WRITE语句以确定失败的位置;

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

我正在探索有关与循环展开或其他优化有关的故障及其解决方案的任何信息。
谢谢大家。

最佳答案

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

  • 简化可重现的案例。即尝试用看似相似的代码重现此问题,该代码已删除所有多余的细节。这很有用,因为a)您会毫不犹豫地公开发布该代码,并且b)如果有人尝试诊断该问题,那么他们会以较少的周围 Material 而变得更加容易。
  • 与专家交谈:如果您有pgf的支持契约(Contract),请使用它!他们的网站上有一个support request form。如果没有,您可能会在“用户论坛”部分中发布信息-其他人可能有更好的解决方法,或者那里的员工可能会记录您的问题。
  • 仔细检查您的代码。您是否可能依赖某种unspecified behavior?这种事情会导致您的程序在更改优化级别时切换行为。我并不是说编译器错误是不可能的,但也可能是代码中的黑客。

  • 希望对您有所帮助。

    关于optimization - 使用-fast编译时,波特兰组FORTRAN pgf90程序失败,-fast -Mnounroll成功时,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4789278/

    相关文章:

    android - OKHTTP 3 MediaType as "application/x-www-form-urlencoded"崩溃问题

    firefox - 从插件调用checkCurrentDictionary()会使FF崩溃-为什么?

    fortran - 什么是假定长度字符函数结果,为什么要避免它?

    r - 优化 R 中的范围

    c - 在 C : Is it faster to access a char* = malloc() used like a 2D array than an array[][]?

    jquery小动画错误

    c - 从 Fortran 中的 C 二进制文件读取 float

    linux - 错误 : undefined reference to NetCDF functions

    c# - 分隔字符串的最有效方法

    javascript - 如何简化/精简这段代码? (对象检查到函数调用中)