2015-09-11 6 views
8

मैं कॉलग्रिंड का उपयोग कर अपने आवेदन को प्रोफाइल करना चाहता हूं। अब, क्योंकि इस बीच में बहुत लंबा समय लगता है, इसलिए मैं उसी मशीन पर वेब-ब्राउजिंग, कंपाइलिंग और अन्य गहन कार्यों के साथ जाता हूं।क्या कॉलग्रिंड प्रोफाइलिंग अन्य प्रक्रियाओं से प्रभावित है?

क्या मैं प्रोफाइलिंग परिणामों को पूर्वाग्रहित कर रहा हूं? मुझे उम्मीद है कि, क्योंकि वाल्ग्रिंड नकली CPU का उपयोग करता है, अन्य बाहरी प्रक्रियाओं को वाल्ग्रिंड निष्पादन में हस्तक्षेप नहीं करना चाहिए। क्या मैं सही हू?

उत्तर

7

डिफ़ॉल्ट रूप से, कॉलग्रिंड समय से संबंधित कुछ भी रिकॉर्ड नहीं करता है, इसलिए आप सभी एकत्रित मीट्रिक (ज्यादातर) मशीन पर अन्य प्रक्रियाओं से स्वतंत्र होने की उम्मीद कर सकते हैं। Callgrind manual राज्यों,

डिफ़ॉल्ट रूप से के रूप में, एकत्र किए गए आंकड़ों निष्पादित निर्देश की संख्या, स्रोत लाइनों के साथ उनके संबंध, कार्यों के बीच फोन करने वाले/कॉल प्राप्त करने वाला रिश्ता है, और इस तरह के कॉल की संख्या के होते हैं।

इस प्रकार, मेट्रिक्स कॉलग्रिंड रिपोर्ट केवल इस पर निर्भर करती है कि प्रोग्राम (अनुरूपित) सीपीयू पर कौन से निर्देश निष्पादित कर रहा है - इस पर निर्देश नहीं है कि इस तरह के निर्देश कितने समय लेते हैं। दरअसल, कई बार कॉलग्रिंड का आउटपुट कुछ हद तक भ्रामक हो सकता है, क्योंकि नकली सीपीयू वास्तविक से अलग हो सकता है (विशेष रूप से जब यह शाखा भविष्यवाणी की बात आती है)। Callgrind paper presented at ICCS 2004 रूप में अच्छी तरह से इस बारे में बहुत स्पष्ट है:

हम ध्यान दें कि सिमुलेशन भस्म दीवार घड़ी समय की भविष्यवाणी करने, के रूप में यह सूक्ष्म-संरचना का विस्तृत सिमुलेशन की आवश्यकता होगी सक्षम नहीं है।

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

हालांकि, मोड़ झूठ बोल रहा है। स्वाभाविक रूप से ऐसी गतिशील सिमुलेशन में प्रोग्राम कितना अलग हो सकता है इस सीमाएं हैं। सबसे पहले, आपका प्रोग्राम अन्य कार्यक्रमों के साथ बातचीत कर सकता है। हालांकि ऐसा करने के लिए व्यतीत समय अप्रासंगिक है (जैसा कि इसके लिए जिम्मेदार नहीं है), सिस्टम में और क्या हो रहा है, इस पर निर्भर करता है कि इंटर-प्रोसेस संचार का रिटर्न कोड निश्चित रूप से बदल सकता है। दूसरा, अधिकांश सिस्टम कॉलों को अप्रतिबंधित चलाने की आवश्यकता होती है और उनके रिटर्न कोड भी बदल सकते हैं - जिससे आपके प्रोग्राम के विभिन्न निष्पादन पथ होते हैं और इस प्रकार, थोड़ा अलग मीट्रिक एकत्र किए जाते हैं। (एक तरफ के रूप में, कैलग्रिड सिस्कोल के दौरान बिताए गए दीवार घड़ी के समय को रिकॉर्ड करने का विकल्प प्रदान करता है, जो हमेशा सिस्टम में और क्या चल रहा है) से प्रभावित होगा। इन प्रतिबंधों के बारे में अधिक जानकारी PhD Dissertation of Nicholas Nethercote ("Dynamic Binary Analysis and Instrumentation") में मिल सकती है।

+0

क्रिस्टोफ सॉमर का जवाब यहां मैंने देखा है सबसे अच्छा, अच्छी तरह से समझाया गया उत्तर है। थम्स अप! –

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