खोज…


Gcc और gprof के साथ प्रोफाइलिंग

GNU gprof प्रोफाइलर, gprof , आपको अपना कोड प्रोफाइल करने की अनुमति देता है। इसका उपयोग करने के लिए, आपको निम्नलिखित चरण करने होंगे:

  1. रूपरेखा जानकारी तैयार करने के लिए सेटिंग के साथ एप्लिकेशन बनाएं

  2. निर्मित एप्लिकेशन चलाकर प्रोफाइलिंग जानकारी उत्पन्न करें

  3. ग्रेफाइट के साथ उत्पन्न प्रोफाइलिंग जानकारी देखें

रूपरेखा जानकारी तैयार करने के लिए सेटिंग्स के साथ एप्लिकेशन बनाने के लिए, हम -pg फ्लैग जोड़ते हैं। इसलिए, उदाहरण के लिए, हम उपयोग कर सकते हैं

$ gcc -pg *.cpp -o app

या

$ gcc -O2 -pg *.cpp -o app

इत्यादि।

एक बार app , app कहें, बनाया गया है, इसे हमेशा की तरह निष्पादित करें:

$ ./app

यह gmon.out नामक एक फ़ाइल का उत्पादन करना चाहिए।

प्रोफाइलिंग परिणाम देखने के लिए, अब दौड़ें

$ gprof app gmon.out

(ध्यान दें कि हम दोनों एप्लिकेशन और साथ ही उत्पन्न आउटपुट प्रदान करते हैं)।

बेशक, आप पाइप या रीडायरेक्ट भी कर सकते हैं:

$ gprof app gmon.out | less

इत्यादि।

अंतिम कमांड का परिणाम एक तालिका होनी चाहिए, जिसकी पंक्तियाँ फ़ंक्शन हैं, और जिनके कॉलम में कॉल की संख्या, कुल समय व्यतीत, स्व समय व्यतीत करने का संकेत है (यानी, बच्चों को कॉल को छोड़कर फ़ंक्शन में बिताया गया समय)।

Gperf2dot के साथ कॉलग्राफ आरेख उत्पन्न करना

अधिक जटिल अनुप्रयोगों के लिए, फ्लैट निष्पादन प्रोफाइल का पालन करना मुश्किल हो सकता है। यही कारण है कि कई प्रोफाइलिंग उपकरण एनोटेटेड कॉलग्राफ जानकारी के कुछ रूप भी उत्पन्न करते हैं।

gperf2dot टेक्स्ट आउटपुट को कई प्रोफाइल्स (Linux perf, callgrind, oprofile आदि) से कॉलग्राफ आरेख में परिवर्तित करता है। आप इसे अपना प्रोफाइलर चलाकर उपयोग कर सकते हैं (उदाहरण के लिए gprof ):

# compile with profiling flags  
g++ *.cpp -pg
# run to generate profiling data                                            
./main
# translate profiling data to text, create image     
gprof ./main | gprof2dot -s | dot -Tpng -o output.png

यहाँ छवि विवरण दर्ज करें

Gcc और Google परफ़ॉर्म टूल्स के साथ सीपीयू उपयोग प्रोफाइलिंग

Google परफ़ॉर्म टूल्स एक CPU प्रोफाइलर प्रदान करता है, जिसमें थोड़ा मित्रवत इंटरफ़ेस है। इसके प्रयेाग के लिए:

  1. Google Perf Tools इंस्टॉल करें
  2. हमेशा की तरह अपना कोड संकलित करें
  3. रनटाइम के दौरान अपने लाइब्रेरी लोड पथ में libprofiler प्रोफाइलर लाइब्रेरी जोड़ें
  4. एक फ्लैट निष्पादन प्रोफ़ाइल, या एक कॉलग्राफ़ आरेख उत्पन्न करने के लिए pprof का उपयोग करें

उदाहरण के लिए:

# compile code
g++ -O3 -std=c++11 main.cpp -o main

# run with profiler
LD_PRELOAD=/usr/local/lib/libprofiler.so CPUPROFILE=main.prof CPUPROFILE_FREQUENCY=100000 ./main

कहाँ पे:

  • CPUPROFILE प्रोफाइलिंग डेटा के लिए आउटपुट फ़ाइल को इंगित करता है
  • CPUPROFILE_FREQUENCY प्रोफाइलर नमूनाकरण आवृत्ति को इंगित करता है;

प्रोफाइलिंग डेटा को पोस्ट-प्रोसेस करने के लिए pprof का उपयोग करें।

आप पाठ के रूप में एक फ्लैट कॉल प्रोफ़ाइल उत्पन्न कर सकते हैं:

$ pprof --text ./main main.prof
PROFILE: interrupts/evictions/bytes = 67/15/2016
pprof --text --lines ./main main.prof
Using local file ./main.
Using local file main.prof.
Total: 67 samples
      22  32.8%  32.8%       67 100.0% longRunningFoo ??:0
      20  29.9%  62.7%       20  29.9% __memmove_ssse3_back /build/eglibc-3GlaMS/eglibc-2.19/string/../sysdeps/x86_64/multiarch/memcpy-ssse3-back.S:1627
       4   6.0%  68.7%        4   6.0% __memmove_ssse3_back /build/eglibc-3GlaMS/eglibc-2.19/string/../sysdeps/x86_64/multiarch/memcpy-ssse3-back.S:1619
       3   4.5%  73.1%        3   4.5% __random_r /build/eglibc-3GlaMS/eglibc-2.19/stdlib/random_r.c:388
       3   4.5%  77.6%        3   4.5% __random_r /build/eglibc-3GlaMS/eglibc-2.19/stdlib/random_r.c:401
       2   3.0%  80.6%        2   3.0% __munmap /build/eglibc-3GlaMS/eglibc-2.19/misc/../sysdeps/unix/syscall-template.S:81
       2   3.0%  83.6%       12  17.9% __random /build/eglibc-3GlaMS/eglibc-2.19/stdlib/random.c:298
       2   3.0%  86.6%        2   3.0% __random_r /build/eglibc-3GlaMS/eglibc-2.19/stdlib/random_r.c:385
       2   3.0%  89.6%        2   3.0% rand /build/eglibc-3GlaMS/eglibc-2.19/stdlib/rand.c:26
       1   1.5%  91.0%        1   1.5% __memmove_ssse3_back /build/eglibc-3GlaMS/eglibc-2.19/string/../sysdeps/x86_64/multiarch/memcpy-ssse3-back.S:1617
       1   1.5%  92.5%        1   1.5% __memmove_ssse3_back /build/eglibc-3GlaMS/eglibc-2.19/string/../sysdeps/x86_64/multiarch/memcpy-ssse3-back.S:1623
       1   1.5%  94.0%        1   1.5% __random /build/eglibc-3GlaMS/eglibc-2.19/stdlib/random.c:293
       1   1.5%  95.5%        1   1.5% __random /build/eglibc-3GlaMS/eglibc-2.19/stdlib/random.c:296
       1   1.5%  97.0%        1   1.5% __random_r /build/eglibc-3GlaMS/eglibc-2.19/stdlib/random_r.c:371
       1   1.5%  98.5%        1   1.5% __random_r /build/eglibc-3GlaMS/eglibc-2.19/stdlib/random_r.c:381
       1   1.5% 100.0%        1   1.5% rand /build/eglibc-3GlaMS/eglibc-2.19/stdlib/rand.c:28
       0   0.0% 100.0%       67 100.0% __libc_start_main /build/eglibc-3GlaMS/eglibc-2.19/csu/libc-start.c:287
       0   0.0% 100.0%       67 100.0% _start ??:0
       0   0.0% 100.0%       67 100.0% main ??:0
       0   0.0% 100.0%       14  20.9% rand /build/eglibc-3GlaMS/eglibc-2.19/stdlib/rand.c:27
       0   0.0% 100.0%       27  40.3% std::vector::_M_emplace_back_aux ??:0

... या आप एक पीडीएफ में एनोटेट कॉलगर्ल उत्पन्न कर सकते हैं:

pprof --pdf ./main main.prof > out.pdf


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow