2009-05-13 20 views
13

मैं वाणिज्यिक प्रोफेसरों में से एक का उपयोग करने के बजाय ओपन सोर्स प्रोफाइलर्स ढूंढने की कोशिश कर रहा हूं, जिसके लिए मुझे $$$ का भुगतान करना है।अनुशंसित ओपन सोर्स प्रोफाइलर्स

  1. चमकदार:: जब मैं SourceForge पर एक खोज, मैं इन चार सी ++ प्रोफाइलर कि मैंने सोचा था कि काफी होनहार थे सामने आने वाले सी ++ प्रोफाइलर
  2. कम वसा प्रोफाइलर
  3. ल्यूक Stackwalker
  4. FreeProfiler

मुझे यकीन नहीं है कि मेरे प्रोग्राम के प्रदर्शन के बारे में सीखने के मामले में कौन से प्रोफाइलरों का उपयोग करना सबसे अच्छा होगा। कुछ सुझाव सुनना बहुत अच्छा होगा।

+0

क्या मंच? जब मैं लिनक्स पर जी ++ के साथ काम कर रहा हूं तो मैं gprof का उपयोग करता हूं। –

+0

मेरा प्रोग्राम विंडोज एक्सपी पर चलता है। – stanigator

उत्तर

6

आप Windows Performance Toolkit को आजमा सकते हैं। उपयोग करने के लिए पूरी तरह से स्वतंत्र। यह blog entry का नमूना-आधारित प्रोफाइलिंग कैसे करें इसका एक उदाहरण है।

+0

मैंने अभी इसे देखा है, लेकिन मुझे पता चला है कि इसे स्थापित करने में सक्षम होने के लिए मुझे अपने कंप्यूटर पर Windows Vista या Server 2008 चलाने की आवश्यकता है। चूंकि मैं लैपटॉप पर विंडोज विस्टा को स्थापित नहीं करना चाहता हूं जिसे मैं विकास के लिए उपयोग कर रहा हूं, जो एक्सपी चला रहा है, मुझे नहीं लगता कि मैं व्यक्तिगत रूप से इस विकल्प के साथ जा सकता हूं। वैसे भी सुझाव के लिए धन्यवाद। – stanigator

+0

मुझे बहुत नींद या यहां तक ​​कि ल्यूक स्टैकवॉल्कर पसंद आया। xPerf सिद्धांत में अच्छा लगता है, लेकिन व्यवहार में यह उपयोग करने के लिए बहुत अजीब है - चलने के लिए मुश्किल, धीरे-धीरे डेटा इकट्ठा करना प्रसंस्करण। – Suma

0

हम LtProf का उपयोग करते हैं और इससे खुश हैं। नहीं खुला स्रोत है, लेकिन केवल $$, नहीं $$$ करने के लिए :-)

3

वहाँ एक से अधिक तरीका है यह।

Don't forget the no-profiler method.

अधिकांश प्रोफाइलर आप 1) समय (नमूने के बहुत सारे) के उच्च सांख्यिकीय परिशुद्धता की जरूरत मान, और 2) समस्या पहचान (कार्यों & कॉल-रेखांकन) की कम परिशुद्धता।

उन प्राथमिकताओं को उलट किया जा सकता है। अर्थात। समस्या सटीक मशीन पते पर स्थित हो सकती है, जबकि लागत परिशुद्धता नमूने की संख्या का एक कार्य है।

सबसे वास्तविक समस्याओं में कम से कम 10% की लागत है, जहां उच्च परिशुद्धता आवश्यक नहीं है।

उदाहरण: यदि कुछ प्रोग्राम आपके प्रोग्राम को 2 गुना तक ले रहा है, तो इसका मतलब है कि इसमें कुछ कोड है जो 50% खर्च करता है। यदि आप धीमी गति से कॉल स्टैक के 10 नमूने लेते हैं, तो कोड की सटीक रेखा लगभग 5 में मौजूद होगी। कार्यक्रम जितना बड़ा होगा, समस्या उतनी अधिक संभावना है कि समस्या कहीं मध्य-स्टैक कॉल हो।

यह काउंटर-इंट्यूविटिव है, मुझे पता है।

नोट: xPerf लगभग वहां है, लेकिन काफी नहीं (जहां तक ​​मैं कह सकता हूं)। यह कॉल स्टैक के नमूने लेता है और उन्हें बचाता है - यह अच्छा है। यहां मुझे लगता है कि इसकी आवश्यकता है:

  • इसे केवल नमूने लेना चाहिए जब आप उन्हें चाहते हैं। जैसा कि है, आपको अप्रासंगिक लोगों को फ़िल्टर करना होगा।

  • स्टैक व्यू में यह विशिष्ट लाइनों या पतों को दिखाना चाहिए, जिन पर कॉल पूरे होते हैं, केवल पूरे कार्यों में नहीं। (शायद यह ऐसा कर सकता है, मैं ब्लॉग से नहीं बता सका।)

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

नोट: मैंने सिर्फ ल्यूक स्टैकवाकर पर देखा, और वही टिप्पणी लागू होती है। मुझे लगता है कि यह सही रास्ते पर है लेकिन यूआई काम की जरूरत है।

जोड़ा गया: ल्यूकस्टैकवाल्कर को अधिक ध्यान से देखते हुए, मुझे डर है कि यह धारणा का शिकार हो जाता है कि कार्यों को मापने से बयानों का पता लगाने से अधिक महत्वपूर्ण है। तो कॉल स्टैक के प्रत्येक नमूने पर, यह फ़ंक्शन-स्तरीय समय की जानकारी अपडेट करता है, लेकिन यह लाइन-नंबर जानकारी के साथ करता है, प्रत्येक फ़ंक्शन में न्यूनतम और अधिकतम पंक्ति संख्याओं का ट्रैक रखता है, जो अधिक नमूने लेता है, उन लोगों के अलावा दूर। तो यह मूल रूप से सबसे महत्वपूर्ण जानकारी - पंक्ति संख्या की जानकारी फेंकता है। कारण यह महत्वपूर्ण है कि यदि आप किसी फ़ंक्शन को अनुकूलित करने का निर्णय लेते हैं, तो आपको यह जानना होगा कि इसमें किन लाइनों को काम की ज़रूरत है, और वे पंक्तियां ढेर के नमूने पर थीं (उन्हें छोड़ने से पहले)।

कोई यह ऑब्जेक्ट कर सकता है कि यदि लाइन नंबर की जानकारी बरकरार रखी गई तो यह भंडारण से जल्दी समाप्त हो जाएगी। दो जवाब 1) नमूने पर दिखाई देने वाली केवल कई रेखाएं हैं, और वे बार-बार दिखाई देती हैं। 2) इतने सारे नमूनों की आवश्यकता नहीं है - धारणा है कि माप की उच्च सांख्यिकीय परिशुद्धता जरूरी है, लेकिन कभी भी उचित नहीं माना जाता है।

मुझे संदेह है कि अन्य स्टैक नमूने, जैसे xPerf, समान समस्याएं हैं।

2

यह खुला स्रोत नहीं है, लेकिन AMD CodeAnalyst निःशुल्क है। यह नाम के बावजूद इंटेल सीपीयू पर भी काम करता है। विंडोज़ (विजुअल स्टूडियो एकीकरण के साथ) और लिनक्स दोनों के लिए संस्करण उपलब्ध हैं।

2

सूचीबद्ध लोगों से, मुझे ल्यूक स्टैकवाल्कर को सर्वश्रेष्ठ काम करने के लिए मिला है - मुझे इसकी जीयूआई पसंद आई, इसे चलाने में आसान था।

अन्य समान Very Sleepy - समान कार्यक्षमता, नमूनाकरण अधिक विश्वसनीय लगता है, जीयूआई शायद उपयोग करने के लिए थोड़ा कठिन (ग्राफिकल नहीं)।


उनके साथ कुछ और समय बिताने के बाद, मुझे एक बहुत ही महत्वपूर्ण कमी मिली है। जबकि दोनों 1 एमएस रिज़ॉल्यूशन पर नमूना देने का प्रयास करते हैं, वस्तुतः वे इसे प्राप्त नहीं करते हैं क्योंकि उनकी नमूना विधि (संलग्न प्रक्रिया का स्टैकवॉक 64) बहुत धीमा है। मेरे आवेदन के लिए कॉलस्टैक प्राप्त करने में 5-20 एमएस की तरह कुछ लगता है। न केवल इससे आपके परिणाम कम हो जाते हैं, इससे उन्हें कमजोर पड़ता है, क्योंकि छोटे कॉलस्टैक तेजी से चलते हैं, इसलिए अधिक हिट मिलते हैं।

+0

हाय फिर से, सुमा।कोड की प्रत्येक पंक्ति (या फ़ंक्शन, यदि आप चाहें) द्वारा उपयोग किए जाने वाले कुल समय का आईएमओ अनुमानित प्रतिशत सटीक पूर्ण समय की तुलना में जानना अधिक महत्वपूर्ण है, और समय के प्रतिशत को नमूनाकरण के नमूने या आवृत्ति के नमूने से प्रभावित नहीं किया जाना चाहिए। –

+0

बड़ी समस्या यह है कि "शॉर्ट कॉलस्टैक तेजी से चल रहे हैं"। यह 1 एमएस पर नमूना करने का प्रयास करते समय कॉल स्टैक गहराई के आधार पर नमूना आवृत्ति चर बनाता है, जो निश्चित रूप से एक बुरी चीज है। 20 एमएस पर नमूना संभव होगा, लेकिन यह मेरे लिए बहुत मोटा है। मैंने व्युत्पन्न संस्करण (कहीं भी प्रकाशित नहीं) में एक अलग नमूनाकरण विधि लागू की है, जहां आवेदन अपने कॉलस्टैक को अपने आप पर नमूना देता है और नीली प्रोफाइलर को नामित पाइप के माध्यम से परिणाम भेजता है। इस तरह नमूनाकरण लगभग 1000x तेज (1-5 यूएस) है, जो 1 एमएस नमूनाकरण बहुत अच्छी तरह से काम करता है। – Suma

+0

यह मानना ​​स्वाभाविक है कि जितना संभव हो उतना नमूना लेना संभव है जितना संभव हो सके (समय अनुमान की सटीकता के लिए), लेकिन यदि कुछ गतिविधि समय के 10% ले रही है, तो यह लगभग 10% नमूनों पर दिखाई देगी, चाहे आप 20 नमूने या 20,000 ले लो, * प्रदान किए गए नमूने अप्रत्याशित समय पर होते हैं * कार्यक्रम क्या कर रहा है के संबंध में। तो आपको इसे खोजने में कोई परेशानी नहीं होगी, यह आपके ऊपर कूद जाएगी। http://stackoverflow.com/questions/406760/whats-your-most-controversial-programming-opinion/1562802#1562802 –

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