C ++ G ++ LLVM-Clang الترجم التنميط
سؤال
لاحظ أن سؤالي ليس: كيف أخبر المترجم الخاص بي بالتجميع مع التنميط.
أريد أن الملف الشخصي عملية التجميع الخاصة بي. لكل ملف ، أود أن أعرف مقدار الوقت الذي يقضيه كل خط البرنامج.
أنا أعمل في مشروع ، وبعض الملفات لها أوقات ترجمة ضخمة ، أحاول معرفة السبب.
هل هناك على أي حال للقيام بذلك باستخدام G ++ أو LLVM-Clang؟
شكرًا!
إخراج -v -ftime -report (ما الذي يعنيه)؟
في ما يلي ، هل "المحلل" أو "توسيع" استخدام القوالب؟
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
المحلول
جرب خيارات سطر الأوامر هذه مع G ++
-v -ftime التقارير
يجب أن يمنحك المزيد من المعلومات حول عملية التجميع. الجاني عادة ما يكون قوالب.
نصائح أخرى
لخط المعالجة المسبقة اقتراح أطول قليلاً:
"0.12 (4 ٪) USR 0.06 (12 ٪) SYS 1.46 (27 ٪) الجدار" - يقول هذا الخط ، أن المعالجة المسبقة كانت للقيام بعمل صغير على وحدة المعالجة المركزية نفسها (0.12) ، ولكنه يستخدم مكالمات النظام إلى حد ما (0.06 أو 50 ٪ من وقت وحدة المعالجة المركزية المستخدم) ومعظم الوقت تم إهدارها على وحدة المعالجة المركزية (1.46 في الوقت الحقيقي >> وقت وحدة المعالجة المركزية 0.18). لذلك تم إهدار هذه المرة في انتظار عملية I/O أو في انتظار وحدة المعالجة المركزية على نظام مشغول. هل كان هذا هو البرنامج الوحيد العمل على الجهاز؟
بالنسبة إلى I/O يمكنك القيام به: إضافة NOATIME إلى FS إلى عدد أقل من I/O Reqs ، وشراء أسرع (من حيث انخفاض وقت البحث أو معدل IO أعلى) HDD ، أو نقل مصادر clang إلى SSD أو حتى RAM-Drive (حلقة- جهاز). ولا يمكنك القيام بتجاهل ، لأنه نظام Linux.
لمعنى تمريرة EASH ، استخدم http://gcc.gnu.org/onlinedocs/gccint/passes.html#passes