2012-11-09 7 views
5

क्या सी प्रोग्राम निष्पादित करते समय निष्पादित निर्देशों की संख्या (x86 निर्देश - जो और कितने प्रत्येक) की त्वरित गणना करने का कोई आसान तरीका है?सी प्रोग्राम में निष्पादित निर्देशों की संख्या गिनने का त्वरित तरीका

मैं x86_64 GNU/Linux मशीन पर gcc version 4.7.1 (GCC) का उपयोग करता हूं।

+2

मैं डोनेस के उत्तर से सहमत हूं कि आम तौर पर लोग प्रति फ़ंक्शन निष्पादन समय को प्रोफ़ाइल करना चाहते हैं। हालांकि, यदि आप वास्तव में निष्पादित प्रत्येक निर्देश की सटीक गणना प्राप्त करना चाहते हैं, तो आपको अपने कोड को निर्देश सेट सिम्युलेटर पर चलाने की आवश्यकता है, जैसे http://www.simplescalar.com/ – TJD

+0

क्या आप जो भी कोशिश कर रहे हैं उस पर विस्तार कर सकते हैं पूरा? X86 पर, निर्देश निष्पादन प्रदर्शन वास्तविक निर्देश पर संदर्भ के मुकाबले कहीं अधिक निर्भर करता है - उदाहरण के लिए, लगभग सभी निर्देश वैकल्पिक रूप से लोड या स्टोर हो सकते हैं। और पूरी तरह से रजिस्टर-टू-रजिस्टर निर्देश आधुनिक CPUs पर पाइपलाइन स्थिति पर जटिल तरीकों पर निर्भर होने जा रहे हैं। यह मेरे लिए उपयोगी जानकारी की तरह नहीं लगता है। –

+1

आप क्यों पूछते हैं? आम तौर पर * प्रोफाइलिंग * का मतलब कुछ अलग है ... जैसे 'gcc -pg -Wall -O' के साथ संकलित करें और' gprof' या शायद 'oprofile' का उपयोग करें !! –

उत्तर

3

शायद this question

का डुप्लिकेट मैं शायद कहना है क्योंकि आप कोडांतरक निर्देश के लिए कहा है, लेकिन इस सवाल का कोड के सी-स्तर की रूपरेखा को संभालती है।

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

हालांकि, यहां कुछ महत्वपूर्ण याद आ सकता है।

+0

सीपीयू निर्देशों की संख्या * निष्पादित * हिचकी के बारे में चिंता किए बिना या अन्य कार्यक्रमों के साथ संसाधनों के लिए प्रतिस्पर्धा करने के बिना एल्गोरिदम की तुलना करने का एक आसान तरीका होगा, जो अभी भी प्रसंस्करण सेट पर निर्भर है। – mpen

+1

@mpen: जरूरी नहीं, उदा।यदि आपके पास एक एल्गोरिदम है जो बड़ी लुकअप टेबल का उपयोग करता है, और दूसरा जो एक और कम्प्यूटेशनल दृष्टिकोण का उपयोग कर एक ही चीज करता है, तो पहले के पास बहुत अधिक लोड निर्देश हो सकते हैं, जिनमें से प्रत्येक संभवतः 100 चक्रों के कारण कैश मिस के लिए रोक सकता है। इसी तरह आपके पास एक एल्गोरिदम हो सकता है जो बहुत सारे महंगे निर्देशों का उपयोग करता है, उदा। 'एफएसक्यूआरटी ', और एक और एल्गोरिदम जो इस तरह के महंगी निर्देशों से बचाता है और शायद कुछ और जोड़/गुणा का उपयोग करता है - दूसरा यह भी तेज हो सकता है भले ही यह अधिक निर्देश निष्पादित करता हो। –

1

आप हार्डवेयर प्रदर्शन काउंटर (एचपीसी) का उपयोग करके निष्पादित निर्देश की संख्या आसानी से गिन सकते हैं। एचपीसी तक पहुंचने के लिए, आपको इसके लिए एक इंटरफेस चाहिए। मैंने आपको पीएपीआई प्रदर्शन API का उपयोग करने की सलाह दी है।

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