سؤال

لاحظ أن سؤالي ليس: كيف أخبر المترجم الخاص بي بالتجميع مع التنميط.

أريد أن الملف الشخصي عملية التجميع الخاصة بي. لكل ملف ، أود أن أعرف مقدار الوقت الذي يقضيه كل خط البرنامج.

أنا أعمل في مشروع ، وبعض الملفات لها أوقات ترجمة ضخمة ، أحاول معرفة السبب.

هل هناك على أي حال للقيام بذلك باستخدام 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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top