0

アプリケーションに厄介なHeisenbugがあります。一般的に言えば、これは MPI-2 の機能を備えた並列 C++ プログラムを生成する並列 Fortran プログラムでMPI_Comm_Spawnあり、ある時点で、奇妙な変数がさらに奇妙な (つまり、シフトされた) 値で終わるか、初期化されていない状態になるため、どこかでバッファーがオーバーランしたように見えます。 2回目または3回目の使用です(たとえば、DOループ内のカウンターは、結合からのデータとはまったく関係のないコードの一部で反復間で値を失います)。

Valgrind は何も報告しません。Electric Fence は何も報告しません。mtrace()何も示しません。GNU と Intel の両方のコンパイラ スイートで同じ問題が発生しますが、どちらも原因や場所を特定できません。最適化とデバッグでは、異なる問題が表示されます。mpich と OpenMPI の両方で同じ問題が発生します。gdb、idb、Intel Inspector は何もキャッチしません。print ステートメントを追加すると、クラッシュの場所が変更されますが、それでも発生します。

すべての単体テストと検証テストは、各プログラムで個別に合格します。問題のように見えるのは、それらの間の相互作用です。しかし、私が使用したツールは、その理由や場所を示すものはありません。

私は完全に途方に暮れています。あなたが知っているすべてのツールとトリックが失敗したとき、あなたは一体何をしますか? 私が見逃した可能性のある他のツールはありますか?私はそれをすべて核攻撃して最初からやり直そうとしています.これが二度目の間違いを犯さないように願っています.

4

1 に答える 1

1

あなたができる唯一のことは、最小限の作業セットから始めて、それが壊れるまで追加することです-または、本当に運が良ければ、わずかに異なるパスで最終的な必要な結果に到達する場合があります

あるいは、あなたは飲むようになることができます

于 2012-12-02T03:14:39.187 に答える