मुझे लिनक्स पर C ++ चलाने वाले कुछ कोड को प्रोफाइल करना होगा। क्या आप लोग कुछ प्रोफाइलरों की सिफारिश कर सकते हैं?
मुझे लिनक्स पर C ++ चलाने वाले कुछ कोड को प्रोफाइल करना होगा। क्या आप लोग कुछ प्रोफाइलरों की सिफारिश कर सकते हैं?
जवाबों:
ग्रिप का उपयोग करें।
बस -pg
ध्वज के साथ संकलित करें (मुझे लगता है कि (लेकिन मुझे यकीन नहीं है) आपको हालांकि अनुकूलन का रुख करना होगा।) और gmon.out फ़ाइल का विश्लेषण करने के लिए gprof का उपयोग करें जिसे आपका निष्पादन योग्य तब उत्पादन करेगा।
उदाहरण के लिए:
gcc -pg -o whatever whatever.c
./whatever
gprof whatever gmon.out
जी ++ और cpp के साथ एक ही बात।
valgrind एक अच्छी तरह से जाना जाने वाला linux profiler है
RotateRight ( http://www.rotateright.com ) से ज़ूम करें जो मैं उपयोग कर रहा हूं। इसमें फ़ंक्शन का तितली दृश्य है और आप किसी भी फ़ंक्शन को स्रोत या asm कोड में गोता लगाने के लिए डबल-क्लिक कर सकते हैं। अपने स्रोत को देखने के लिए डिबगिंग जानकारी (-g) के साथ बनाएँ, लेकिन आपको अभी भी अनुकूलित कोड का निर्माण और प्रोफाइल करना चाहिए ।
-fno-omit-frame-pointer
प्रभावी रूप से प्रोफाइल के साथ कोड बनाने की आवश्यकता है ।
मैं Oprofile का प्रशंसक हूं । इसमें कर्नेल मॉड्यूल स्थापित करना शामिल है और इसमें सीखने की अवस्था थोड़ी है, लेकिन यह काफी शक्तिशाली है और डिबगिंग प्रतीकों के बिना अनुकूलित कार्यक्रमों / कार्यक्रमों के लिए बहुत अच्छी तरह से काम करता है।
Vtune Intel द्वारा बनाया गया एक और बहुत शक्तिशाली प्रोफाइलर है। मेरा मानना है कि नॉन-कमर्शियल सॉफ्टवेयर के लिए लिनक्स संस्करण मुफ्त है।
इसमें dfa द्वारा प्रस्तावित टूल का Valgrind सुइट भी है । Callgrind शायद वही होगा जिसमें आप सबसे अधिक रुचि रखते हैं। Cachegrind (जिसकी विशेषता Callgrind की एक सबसेट है) और मस्सिफ़ दिलचस्प होने के साथ-साथ दिलचस्प भी है, लेकिन मुझे बाद वाले का कोई अनुभव नहीं है।
पर एक नजर डालें KCacheGrind जो करने के लिए एक ग्राफिकल दृश्यपटल है valgrind और यह वास्तव में आसान यह उपयोग करने के लिए बनाता है।
Google के पास google-perftools के भाग के रूप में एक अच्छा प्रोफाइलर भी है - जो डेबियन / उबंटू और संभवतः अन्य डिस्ट्रोस में शामिल हैं।
प्रोफाइलिंग के लिए gprof मानक gnu उपकरण है।
prof
।
prof
किसी भी तरह से शुरू करने के लिए समझ में आता है : अगर मुझे लगता है कि f()
सांख्यिकीय रूप से सबसे समस्याग्रस्त कार्य है, तो मैं कार्यक्रम को कई बार रोकूंगा जब तक कि मैं f()
सिर्फ एक यादृच्छिक फ़ंक्शन के साथ शुरू करने के बजाय लैंड नहीं करता हूं जो मैंने पहले बंद कर दिया था।