2009-05-05 8 views
2

Ich muss eine Anwendung profilieren, die mit dem Compiler von Intel über VC++ kompiliert wird. Ich verwende VTune, um meinen Code zu profilieren.Welche Kompilierungsoption sollte für das Profiling festgelegt werden?

Mein Verständnis ist, dass im Release-Modus Ich werde nicht die Debug-Informationen habe, die notwendig ist für die Profiler meines Code zum Profil, während im Debug-Modus, das Ergebnis der Profilierung nicht relevant sein wird.

Was soll ich tun? Ist es möglich, Debug-Informationen im Release-Modus hinzuzufügen? Wie kann ich diesen Modus einstellen?

Wenn ja, werde ich noch von der ganzen Optimierung (Inlining etc.) profitieren?

Antwort

4

Sie sollten Profil mit aktivierten Optimierungen (Compiler-Option/O3)./Zi ist der Intel-Compiler-Schalter (unter Windows), um Debugging-Informationen zu aktivieren.

Aufgrund der Optimierungen können einige Funktionen aufgrund von Inlining in den Debuginformationen fehlen, aber VTune wird damit zurechtkommen.

+0

"damit umgehen"? Bitte gehen Sie nicht davon aus, dass dies unter keinen Umständen geschieht. – JohnTortugo

+0

@JohnTortugo: nicht ganz sicher, was du meinst - welche andere Wahl gibt es? Sie wollen Optimierungen, damit die Profilerstellung repräsentativ ist, aber das bedeutet, dass Funktionen inline werden und keine Debug-Informationen enthalten. Es ist die Aufgabe von Debuggern und Profilern, damit klarzukommen. –

3

Sie können Programmdatenbankdateien (PDB) sogar im Freigabeziel generieren. Gehen Sie zu den Projekteigenschaften, Linker/Debugging und aktivieren Sie die Option "Programmdatenbankdatei erzeugen". Es ist normalerweise etwas wie "$ (TargetDir) $ (TargetName) .pdb". Jetzt hängt es davon ab, ob VTune PDB-Dateien interpretieren kann ...

1

Funktion Inlining und Interprozess-Optimierungen werden Ihr Profil schwer zu interpretieren. Daher ist es eine gute Idee, sowohl im Debug- als auch im Release-Modus zu profilieren. Wenn im Freigabemodus nur die Funktion foo mit 80% der Programmzeit angezeigt wird, können Sie das Debug-Profil verwenden, um zu sehen, dass die in foo eingefügte Funktionsleiste 60% der foo-Zeit verwendet.

Verwandte Themen