2008-09-16 9 views
7

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

मैं व्यक्तिगत रूप से ffmpeg के "bench.h" का उपयोग करके स्वयं को ढूंढता हूं, सी मैक्रोज़ का एक सेट जो घड़ी के समय को मापने के लिए rdtsc का उपयोग करता है और संदर्भ स्विच और इसी तरह के लिए स्वचालित रूप से क्षतिपूर्ति करता है। बेशक, इस दृष्टिकोण की अपनी कमजोरियां हैं; StackOverflow उपयोगकर्ताओं को अन्य कम-स्तरीय प्रोफाइलिंग विधियां क्या करती हैं?

उत्तर

2

अब मैं निम्न-स्तरीय प्रोग्रामिंग नहीं करता हूं, लेकिन अगर मैंने किया, तो मैं निश्चित रूप से dtrace देखेंगे; जो मैंने पढ़ा है उससे यह बेहद दिलचस्प लगता है। ओएस एक्स उपयोगकर्ताओं के लिए shark भी है।

0

valgrind यूनिक्स आधारित सिस्टम पर मेरी पसंद का टूल है।

0

मुख्य समस्या यह है कि जब आप अपने बेंचमार्किंग में 'संकलित' करते हैं तो आप संभावित रूप से अपने परिणामों को संशोधित करते हैं (कार्यान्वयन के तरीके और कब के आधार पर)। और उन निम्न स्तर की चीजों के साथ आप शायद अपने कंपाइलर के अनुकूलन से बहुत प्रभावित हैं।

लेकिन व्यक्तिगत रूप से लिनक्स पर मेरे पास oprofile (oprofile) के लिए एक नरम स्थान है, यह एक सिस्टम विस्तृत प्रोफाइलर है जो कर्नेल मॉड्यूल के रूप में एम्बेडेड होता है और समय-समय पर निशान जहां आप समय व्यतीत कर रहे हैं। तो यह आपके पूरे सिस्टम की प्रोफाइल करता है, न केवल एक आवेदन। लेकिन यह हो सकता है कि यह आपको पर्याप्त ग्रैन्युलरिटी नहीं दे रहा है।

0

मैं सलाह दूंगा कि आप इसे कोड करने के लिए अपने कोड को वाद्य यंत्र न दें। सबसे अच्छा जवाब मैं दे सकता हूं कि इंटेल से PTU (प्रदर्शन ट्यूनिंग उपयोगिता) का उपयोग करना होगा, यह यहां पाया जा सकता है:

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

1

valgrind पहले ही उल्लेख किया गया है, लेकिन यह callgrind उपकरण के साथ विशेष रूप से उपयोगी है:

$ valgrind --tool=callgrind your_program 

तो फिर तुम KCacheGrind उपयोग कर सकते हैं डेटा कल्पना करने के लिए।

0

Linux के लिए: Google Perftools

  • valgrind से तेज़ (अभी तक, तो ठीक नहीं सुक्ष्म)
  • कोड इंस्ट्रूमेंटेशन जरूरत नहीं है
  • अच्छा चित्रमय परिणाम (-> kcachegrind)
  • करता है मेमोरी-प्रोफाइलिंग, सीपीयू-प्रोफाइलिंग, लीक-चेकिंग
0

ठीक है, आप गर्म का वर्णन कर रहे हैं -स्पॉट स्थिति - एक तंग लूप जो समय के एक बड़े अंश पर कब्जा करता है और इसमें फ़ंक्शन कॉल नहीं होते हैं।

आप जानना चाहते हैं कि आपके द्वारा किए गए परिवर्तनों का कोई प्रभाव पड़ रहा है या नहीं।

यहाँ मैं क्या कर सकता है:

  • देखने के लिए क्या करने के लिए बदलने के लिए यह तेजी से, दो तरीकों, हड्डियों को सरल:

1) भीतरी लूप के माध्यम से एकल कदम , यह देखने के लिए कि यह क्या कर रहा है और क्यों। संभावनाएं बहुत अच्छी हैं, मैं कुछ चीजें देखूंगा जो बेहतर हो सकती हैं।

और/या

2) यह एक बड़ा बाहरी पाश में चल रहा है, और फिर मैन्युअल रूप से इसमें बाधा डालते हैं। यह कई बार करो। निर्देश/बयान जो अधिकतर समय के लिए खाते हैं, उन नमूनों में मोटे तौर पर उनकी लागत के अनुपात में दिखाई देंगे। अगर मैं किसी भी अंतर, एक और बोन सरल तकनीक बनाया है

  • बताने के लिए: एक बाहरी पाश में

भागो यह एक अरब गुना और सेकंड गिनती। यह बताता है कि आंतरिक लूप कितने नैनोसेकंड लेता है।