मैं शोर और गणना को हटाकर मेरे कोड का एक विशिष्ट भाग (कॉलग्रिंड के साथ) प्रोफाइल करने का प्रयास कर रहा हूं, जिसकी मुझे परवाह नहीं है। यहाँ मैं क्या करना चाहते हैं का एक उदाहरण है:कॉलग्रिंड: प्रोफाइल मेरे कोड का एक विशिष्ट हिस्सा
for (int i=0; i<maxSample; ++i) {
//Prepare data to be processed...
//Method to be profiled with these data
//Post operation on the data
}
मेरे यूज-केस प्रतिगमन परीक्षण है, मुझे यकीन है कि प्रश्न में पद्धति अभी भी काफी तेजी से (10% से कम अतिरिक्त की तरह कुछ है बनाना चाहते अंतिम कार्यान्वयन के बाद से निर्देश)। यही कारण है कि मैं क्लीनर आउटपुट फॉर्म कैलिग्रिंड बनाना चाहता हूं। (मैं आदेश विधि मैं प्रोफ़ाइल करना चाहते हैं के व्यवहार का एक अच्छा अनुमान है करने के लिए प्रोसेस डेटा की एक महत्वपूर्ण राशि के लिए में पाश के लिए एक की जरूरत है)
मेरे पहली कोशिश करने के लिए कोड को बदलने के लिए किया गया था:
for (int i=0; i<maxSample; ++i) {
//Prepare data to be processed...
CALLGRIND_START_INSTRUMENTATION;
//Method to be profiled with these data
CALLGRIND_STOP_INSTRUMENTATION;
//Post operation on the data
}
CALLGRIND_DUMP_STATS;
उपकरण नियंत्रण को नियंत्रित करने के लिए कॉलग्रेंड मैक्रोज़ जोड़ना। मैंने यह सुनिश्चित करने के लिए --instr-atstart = कोई विकल्प भी जोड़ा है कि मैं केवल उस कोड का हिस्सा हूं जो मैं चाहता हूं ...
दुर्भाग्यवश इस कॉन्फ़िगरेशन के साथ जब मैं कॉलग्रिंड के साथ अपना निष्पादन योग्य लॉन्च करना शुरू करता हूं, तो यह कभी समाप्त नहीं होता ... यह धीमापन का सवाल नहीं है, क्योंकि एक पूर्ण उपकरण एक मिनट से भी कम समय तक चलता है।
मैं भी
for (int i=0; i<maxSample; ++i) {
//Prepare data to be processed...
CALLGRIND_TOGGLE_COLLECT;
//Method to be profiled with these data
CALLGRIND_TOGGLE_COLLECT;
//Post operation on the data
}
CALLGRIND_DUMP_STATS;
(या --toggle-संग्रह = "MyMethod" विकल्प) की कोशिश की लेकिन Callgrind मुझे किसी भी कॉल के बिना एक लॉग लौटे (KCachegrind बर्फ के रूप में :(सफेद है और शून्य निर्देश का कहना है एक ...)
मैं सही ढंग से मैक्रो/विकल्प का उपयोग किया? मैं क्या आदेश अपेक्षित परिणाम प्राप्त करने के लिए बदलने की जरूरत के किसी भी विचार?
तो आप उपकरण शुरू/बंद नहीं करते? – Paschalis
@Paschalis स्टार्ट/स्टॉप हर बार जब आप स्टॉप कॉल करते हैं तो नया डंप बना देगा। यदि आप एक ही रिपोर्ट में एकत्रीकरण प्राप्त करना चाहते हैं, तो टॉगल जाने का तरीका प्रतीत होता है (मूल रूप से यह केवल सक्रिय/निष्क्रिय उपकरण को फ़्लिप करता है)। – joetde
प्रतिक्रिया @joetde के लिए धन्यवाद। मैंने पूछा क्योंकि मुझे एक समस्या का सामना करना पड़ रहा है जहां कॉलग्रिड या किसी अन्य उपकरण से कॉलबैक/मैक्रोज़ कभी भी नहीं कहा जाता है। अधिक [यहां] (http://goo.gl/08OM3c)! – Paschalis