C ++ ++ g llvm-Klirren Compiler Profilierungs
Frage
Beachten Sie, meine Frage ist nicht gemeinfrei. Wie sage ich meinen Compiler mit Profilierungs auf kompilieren
Ich will Profil mein compiles Prozess. Für jede Datei, würde Ich mag wissen, wie viel Zeit verbringen wir auf jeder Zeile des Programms.
Ich bin an einem Projekt arbeiten, haben einige Dateien riesige Kompilierung mal, ich versuche, herauszufinden, warum.
Gibt es trotzdem, dies mit g zu tun ++ oder llvm-Klirren?
Danke!
Ausgabe von -v -ftime-Bericht (was OES es bedeutet)?
Im Folgenden ist „Parser“ oder „erweitern“, um die Verwendung von Vorlagen?
Execution times (seconds)
callgraph construction: 0.06 ( 2%) usr 0.00 ( 0%) sys 0.09 ( 2%) wall 3181 kB ( 1%) ggc
callgraph optimization: 0.05 ( 2%) usr 0.00 ( 0%) sys 0.05 ( 1%) wall 5243 kB ( 2%) ggc
cfg cleanup : 0.02 ( 1%) usr 0.00 ( 0%) sys 0.02 ( 0%) wall 11 kB ( 0%) ggc
df live regs : 0.01 ( 0%) usr 0.00 ( 0%) sys 0.01 ( 0%) wall 0 kB ( 0%) ggc
df reg dead/unused notes: 0.03 ( 1%) usr 0.00 ( 0%) sys 0.03 ( 1%) wall 1993 kB ( 1%) ggc
register information : 0.04 ( 1%) usr 0.00 ( 0%) sys 0.04 ( 1%) wall 0 kB ( 0%) ggc
alias analysis : 0.01 ( 0%) usr 0.00 ( 0%) sys 0.01 ( 0%) wall 450 kB ( 0%) ggc
rebuild jump labels : 0.03 ( 1%) usr 0.00 ( 0%) sys 0.03 ( 1%) wall 0 kB ( 0%) ggc
preprocessing : 0.12 ( 4%) usr 0.06 (12%) sys 1.46 (27%) wall 2752 kB ( 1%) ggc
parser : 0.67 (21%) usr 0.15 (29%) sys 0.89 (16%) wall 91749 kB (36%) ggc
name lookup : 0.15 ( 5%) usr 0.12 (24%) sys 0.24 ( 4%) wall 14384 kB ( 6%) ggc
inline heuristics : 0.03 ( 1%) usr 0.00 ( 0%) sys 0.03 ( 1%) wall 0 kB ( 0%) ggc
tree gimplify : 0.06 ( 2%) usr 0.01 ( 2%) sys 0.09 ( 2%) wall 15992 kB ( 6%) ggc
tree eh : 0.02 ( 1%) usr 0.01 ( 2%) sys 0.03 ( 1%) wall 4405 kB ( 2%) ggc
tree CFG construction : 0.01 ( 0%) usr 0.01 ( 2%) sys 0.03 ( 1%) wall 6636 kB ( 3%) ggc
tree CFG cleanup : 0.02 ( 1%) usr 0.01 ( 2%) sys 0.02 ( 0%) wall 15 kB ( 0%) ggc
tree find ref. vars : 0.00 ( 0%) usr 0.00 ( 0%) sys 0.00 ( 0%) wall 1870 kB ( 1%) ggc
tree SSA rewrite : 0.01 ( 0%) usr 0.00 ( 0%) sys 0.01 ( 0%) wall 2357 kB ( 1%) ggc
tree SSA other : 0.00 ( 0%) usr 0.01 ( 2%) sys 0.00 ( 0%) wall 37 kB ( 0%) ggc
tree operand scan : 0.01 ( 0%) usr 0.04 ( 8%) sys 0.06 ( 1%) wall 6340 kB ( 2%) ggc
tree SSA to normal : 0.05 ( 2%) usr 0.00 ( 0%) sys 0.05 ( 1%) wall 95 kB ( 0%) ggc
dominance computation : 0.04 ( 1%) usr 0.00 ( 0%) sys 0.04 ( 1%) wall 0 kB ( 0%) ggc
expand : 0.60 (18%) usr 0.03 ( 6%) sys 0.71 (13%) wall 45557 kB (18%) ggc
varconst : 0.02 ( 1%) usr 0.00 ( 0%) sys 0.02 ( 0%) wall 3532 kB ( 1%) ggc
jump : 0.00 ( 0%) usr 0.00 ( 0%) sys 0.00 ( 0%) wall 1745 kB ( 1%) ggc
mode switching : 0.01 ( 0%) usr 0.00 ( 0%) sys 0.01 ( 0%) wall 0 kB ( 0%) ggc
integrated RA : 0.35 (11%) usr 0.00 ( 0%) sys 0.35 ( 6%) wall 5259 kB ( 2%) ggc
reload : 0.29 ( 9%) usr 0.01 ( 2%) sys 0.31 ( 6%) wall 6490 kB ( 3%) ggc
thread pro- & epilogue: 0.10 ( 3%) usr 0.01 ( 2%) sys 0.13 ( 2%) wall 4832 kB ( 2%) ggc
final : 0.19 ( 6%) usr 0.01 ( 2%) sys 0.21 ( 4%) wall 2985 kB ( 1%) ggc
symout : 0.25 ( 8%) usr 0.01 ( 2%) sys 0.26 ( 5%) wall 27322 kB (11%) ggc
TOTAL : 3.25 0.51 5.49 256741 kB
Lösung
Versuchen Sie diese Befehlszeilenoptionen mit g ++
-v -ftime-report
Das sollten Sie weitere Informationen über die Zusammenstellung Prozess geben. Der Täter ist in der Regel Vorlagen though.
Andere Tipps
Für die Vorverarbeitung Linie etwas länger Vorschlag:
"0,12 (4%) usr 0,06 (12%) sys 1,46 (27%) Wand" - diese Zeile sagt, dass Vorverarbeitung kleinen Job auf CPU selbst (0,12) zu tun, sondern ist Verwendungen Systemaufrufe eher schwer ( 0,06 oder 50% der Benutzer-CPU-Zeit) und die meisten Zeit nicht auf CPU (1,46 Echtzeit >> 0,18 s CPU-Zeit verschwendet). Dieses Mal wurde in Warte eine I / O-Operation oder wartet auf CPU auf ausgelastetes System verschwendet. War dies das einzige Arbeitsprogramm auf dem Computer ausgeführt werden?
Für I / O Sie tun können: add noatime zu fs Anzahl von I zu senken / O reqs, Einkauf schneller (in Form von niedrigerer Suchzeit oder höher IO-Rate) HDD, bewegt Klirren Quellen SSD oder sogar RAM-Laufwerk (loop-Gerät). Und man kann nicht einen Defragmentierungs tun, weil es Linux ist.
Für das heißt von eash Pass benutzen http://gcc.gnu.org /onlinedocs/gccint/Passes.html#Passes