2011-01-12 15 views
7

मैं मुख्य रूप से उपकरण और नमूनाकरण के प्रोफाइलरों के बीच एक अध्ययन कर रहा हूं।प्रोफाइलर्स इंस्ट्रूमेंटिंग वीएस नमूनाकरण

  • नमूना: कार्यक्रम के निष्पादन को रोकने, पीसी लेने के लिए और इस प्रकार अनुमान थे कार्यक्रम
  • instrumenting है: तो यह बढ़ा देते हैं कार्यक्रम के लिए कुछ भूमि के ऊपर कोड जोड़ने मैं निम्नलिखित जानकारी के साथ आया है प्रोग्राम को जानने के लिए कुछ पॉइंटर्स

यदि उपर्युक्त जानकारी गलत है तो मुझे सही करें।

इसके बाद मैं निष्पादन के समय को देख रहा था और कुछ ने कहा कि उपकरण नमूनाकरण से अधिक समय लेता है! क्या ये सही है?

यदि हां ऐसा क्यों है? नमूनाकरण में आपको प्रक्रियाओं के बीच संदर्भ स्विचिंग की कीमत का भुगतान करना होगा, जबकि बाद में उसी कार्यक्रम में कोई कीमत नहीं

क्या मुझे कुछ याद आ रही है?

चीयर्स! =)

+0

बोलने क्या एक कार्यक्रम पीसी नमूने के द्वारा कर रही है केवल कुछ सेकंड नमूने के द्वारा समय बताने की कोशिश कर रहा तरह है। वास्तविक सॉफ्टवेयर के लिए लागू, आमतौर पर यह कहता है कि प्रोग्राम "कहीं" कर्नेल में अर्थहीन है। ढेर के नमूने अधिक उपयोगी होते हैं क्योंकि वे बताते हैं कि * क्यों * यह वहां है। इंस्ट्रूमेंटिंग घड़ी पर समय बताने की कोशिश करने की तरह है जहां कई अंक मिटा दिए गए हैं, जैसे कि यह 2:00 से 7:00 तक कूदता है। ऐसा इसलिए है क्योंकि यह समय काम करता है लेकिन कोड की रेखा नहीं। एक बड़ा काम मारा और आप अनुमान लगाने के लिए वापस आ गए हैं। –

उत्तर

6

एक नमूना प्रोफाइलर द्वारा उत्पन्न इंटरप्ट्स आम तौर पर कुल निष्पादन समय में एक अपरिहार्य राशि जोड़ते हैं, जब तक कि आपके पास बहुत छोटा नमूना अंतराल न हो (उदा। < 1 एमएस)।

उपकरण प्रोफाइलिंग के साथ एक बड़ा ओवरहेड हो सकता है, उदा। छोटे पत्ते के कार्यों पर जिन्हें कई बार बुलाया जाता है, क्योंकि उपकरण के पुस्तकालय की कॉल फ़ंक्शन के निष्पादन समय की तुलना में महत्वपूर्ण हो सकती है।

4

यह निर्भर करता है कि आप पारंपरिक कैसे बनना चाहते हैं।

gprof उन दोनों चीजों को आपने बताया है। Here are some comments on that.

विचार का एक स्कूल है जो कहता है कि प्रोफाइलिंग मापने के बारे में है। मापने क्या? खैर, कुछ भी - बस मापने। इसके साथ-साथ यह विचार भी मिलता है कि आप जो प्राप्त करना चाहते हैं वह एक "बड़ी तस्वीर" है जो हो रहा है। यह विद्यालय अधिकतर "धीमे कार्यों" को खोजने की कोशिश कर रहा है, स्पष्ट रूप से परिभाषित किए बिना कि इसका अर्थ क्या है, और आपको ऑप्टिमाइज़ करने के लिए वहां देखने के लिए कह रहा है।

एक और स्कूल कहता है कि आप वास्तव में डिबगिंग कर रहे हैं। आप निश्चित रूप से किसी निश्चित प्रकार की बग का पता लगाना चाहते हैं - जो प्रोग्राम को गलत नहीं बनाते हैं, बल्कि वे बहुत अधिक समय लेते हैं। ये बड़ी तस्वीर चीजें नहीं हैं। वे कोड में बहुत सटीक बिंदु हैं जहां कुछ ऐसा हो रहा है जो आवश्यकतानुसार बहुत अधिक समय लेता है। बिल्कुल कितना महत्वपूर्ण नहीं है। यह महत्वपूर्ण है कि यह स्थित है ताकि इसे ठीक किया जा सके। इस दृष्टिकोण में, प्रोफाइलिंग ओवरहेड अप्रासंगिक है, और इसलिए माप की सटीकता भी है। यह देखने के लिए कितना माप है कि कितना समय बचाया गया था।

एक प्रोफेसर, जो मुझे लगता है, सफलतापूर्वक दोनों शिविरों को फैलाता है, Zoom है, क्योंकि यह कॉल स्टैक, दीवार घड़ी के समय, और प्रस्तुत करता है, लाइन/निर्देश स्तर पर, स्टैक पर समय का प्रतिशत। कुछ अन्य प्रोफाइलर भी ऐसा करते हैं, लेकिन अधिकांश नहीं करते हैं।

मैं दूसरे स्कूल में हूं, और here's an example जो आप इसके साथ पूरा कर सकते हैं।

Here's a more brief discussion of the issues.

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