2010-03-30 12 views
13

नोट, मेरा सवाल यह नहीं है: मैं अपने कंपाइलर को प्रोफाइलिंग के साथ संकलित करने के लिए कैसे कहूं।सी ++ जी ++ एलएलएमएम-क्लैंग कंपाइलर प्रोफाइलिंग

मैं प्रोफाइल मेरी संकलन प्रक्रिया चाहता हूं। प्रत्येक फ़ाइल के लिए, मैं जानना चाहता हूं कि प्रोग्राम की प्रत्येक लाइन पर कितना समय व्यतीत किया जाता है।

मैं एक परियोजना पर काम कर रहा हूं, कुछ फाइलों में बड़ी संकलन समय है, मैं यह समझने की कोशिश कर रहा हूं कि क्यों।

क्या यह 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 
+0

का उपयोग यह सबसे अच्छा आप प्राप्त कर सकते है। व्यक्तिगत सी ++ लाइनों का समय देखना असंभव है लेकिन यहां आप देख सकते हैं कि समस्या प्रीप्रोसेसर, या पार्सर या किसी अन्य कंपाइलर चरणों के साथ है या नहीं। आपकी फ़ाइल को केवल 3.25 सेकंड में संकलित किया गया था। – bitc

उत्तर

7

जी ++

-v -ftime-रिपोर्ट

है कि आप संकलन प्रक्रिया पर अधिक जानकारी देना चाहिए के साथ इन कमांड लाइन विकल्पों की कोशिश करो। अपराधी आमतौर पर टेम्पलेट्स है।

+0

अंतिम उपाय के रूप में आप सबसे अधिक समय ले रहे हैं यह जानने के लिए सामान को टिप्पणी कर सकते हैं। – bitc

1

पूर्व प्रसंस्करण लाइन थोड़ा अधिक समय सुझाव के लिए: "usr 0.06 (12%) 0.12 (4%) सिस 1.46 (27%) दीवार"

- इस लाइन का कहना है, कि पूर्व प्रसंस्करण CPU पर छोटे काम करने के लिए था स्वयं (0.12), लेकिन सिस्टम कॉल का उपयोग भारी (0.06 या 50% उपयोगकर्ता CPU समय) का उपयोग करता है और अधिकांश समय सीपीयू (1.46 वास्तविक समय >> 0.18 एस सीपीयू समय) पर बर्बाद नहीं किया गया था। तो इस बार आई/ओ ऑपरेशन की प्रतीक्षा में बर्बाद हो गया था या व्यस्त प्रणाली पर सीपीयू की प्रतीक्षा कर रहा था। क्या यह मशीन पर एकमात्र कामकाजी कार्यक्रम चला रहा था?

I/O के लिए आप कर सकते हैं: I/O reqs की संख्या कम करने के लिए fs को जोड़ें, तेजी से खरीदें (कम खोज समय या उच्चतर आईओ दर के मामले में) एचडीडी, एसएसडी या यहां तक ​​कि रैम- ड्राइव (लूप-डिवाइस)। और आप एक डिफ्रैगमेंट नहीं कर सकते हैं, क्योंकि यह लिनक्स है।

eash पास के अर्थ के लिए, http://gcc.gnu.org/onlinedocs/gccint/Passes.html#Passes

+0

लाइनों के अर्थ के लिए: जीसीसी में संक्षिप्त परिचय http://www.cse.iitb.ac.in/~uday/gcc-mini-workshop/gcc-internals-1.pdf आरटीएल http: //www.cse के बारे में प्रस्तुति .iitb.ac.in/gRC/जीसीसी-कार्यशाला -09/डाउनलोड/gccw09-rtl.pdf – osgx

संबंधित मुद्दे