1

このコードは、最近、サイレントに失敗するエッジケースを発見するまで、長い間陽気にハミングしました。エラーは返されませんでした。失敗は見たところかなり微妙です。エッジケースでは、次の方法でコードを問題なく実行できます。

-traceback1)デバッグ(-gまたは-gopt) を含むまたはデバッグするオプションのセットを使用してコンパイルする。

-fast -Mnounroll2) ; でコンパイルする

3)最適化<2でコンパイルします。

4)コードにWRITEステートメントを追加して、失敗の場所を特定します。

言い換えれば、障害のデバッグに役立つツールのほとんどは、実際には障害が消えることになります。

ループの展開やその他の最適化に関連する障害とその解決策に関する情報を調べています。

よろしくお願いします。

4

1 に答える 1

0

私はpgfに精通していません(Fortranを使用してから10年が経ちました)が、(潜在的な)コンパイラのバグを追跡するための一般的な提案を次に示します。

  1. 再現可能なケースを簡素化します。つまり、余分な詳細をすべて削除した、似たようなコードで問題を再現しようとします。これは、a)コードを公開することを躊躇せず、b)誰かが問題を診断しようとした場合、周囲の資料が少ない方が簡単になるため、役立ちます。

  2. 専門家に相談してください:pgfのサポート契約を結んでいる場合は、それを使用してください。彼らのサイトにはサポートリクエストフォームがあります。そうでない場合は、情報を投稿できる可能性のあるユーザーフォーラムセクションがあります。他の誰かがより良い回避策を持っているか、そこの従業員があなたの問題をログに記録できる可能性があります。

  3. コードを再確認してください。ある種の不特定の振る舞いに依存している可能性はありますか?これは、最適化レベルを変更するときにプログラムが動作を切り替える原因となるようなものです。コンパイラのバグが不可能だと言っているわけではありませんが、コードのハックになる可能性もあります。

お役に立てば幸いです。

于 2011-01-25T06:29:35.637 に答える