Was sind die allgemeinen Strategien Debuggen von numerischen Code zu starten, wenn:Wie wird mit dem Debuggen von Zahlencode begonnen, wenn NaN nur angezeigt werden, wenn sie mit Optimierungen kompiliert wurden?
- Code mit aggressiven Optimierungs-Flags zusammengestellt, occational NaN produziert das und Inf die in der Ausgabe
- Code kompiliert mit
-g
für den Betrieb (die-O0
impliziert) mit Debugger, erzeugt NaN's und Infs nicht mehr?
In diesem Fall habe ich mit der Portland Group C++ Compiler, PGCC und verwendeten Optionen Optimierung arbeitete
-w -fast -O3 -Mipa=fast -Mfprelaxed -Minline=levels:10
und dann nur
-w -g
für die Debugging-Version . Aber ich bin sicher, dass eine ähnliche Situation mit g++
auch passieren könnte.
EDIT: Hinzufügen von Druckanweisungen ist keine sehr verlockende Option, da der Code nicht von mir geschrieben wird, es mehrere tausend Zeilen groß ist, und ich habe keine Ahnung, die Suche einzuschränken; Die NaNs können von überall her stammen.
Können Sie Druckanweisungen hinzufügen? –
Wenn die Korrektheit einen höheren Wert als die Geschwindigkeit aufweist, sollten Sie auf Optimierungen verzichten, die Sie nicht steuern. –
Alex: Es wäre schön, die verdächtigen Zeilen im Quellcode zu finden, um sie sehen zu können und zu entscheiden, ob sie richtig erscheinen. –