खोज…


प्रोफाइलिंग के लिए अपने कार्यक्रम का संकलन

जीएचसी संकलक के पास प्रोफाइलिंग एनोटेशन के संकलन के लिए परिपक्व समर्थन है

का उपयोग करते हुए -prof और -fprof-auto झंडे जब क्रम में उपयोग के लिए झंडे रूपरेखा के लिए अपने द्विआधारी करने के लिए समर्थन जोड़ देगा संकलन।

मान लीजिए कि हमारे पास यह कार्यक्रम है:

main = print (fib 30)
fib n = if n < 2 then 1 else fib (n-1) + fib (n-2)

इसे इस तरह संकलित किया:

ghc -prof -fprof-auto -rtsopts Main.hs

फिर इसे प्रोफाइलिंग के लिए रनटाइम सिस्टम विकल्पों के साथ चलाया:

./Main +RTS -p

हम एक main.prof फ़ाइल बनाई गई पोस्ट निष्पादन (एक बार प्रोग्राम से बाहर निकल जाने के बाद) देखेंगे, और यह हमें सभी प्रकार की प्रोफाइलिंग जानकारी जैसे कि लागत केंद्र, जो हमें कोड के विभिन्न भागों को चलाने के साथ जुड़े लागत का टूटना देगा :

    Wed Oct 12 16:14 2011 Time and Allocation Profiling Report  (Final)

           Main +RTS -p -RTS

        total time  =        0.68 secs   (34 ticks @ 20 ms)
        total alloc = 204,677,844 bytes  (excludes profiling overheads)

COST CENTRE MODULE  %time %alloc

fib         Main    100.0  100.0


                                                      individual     inherited
COST CENTRE MODULE                  no.     entries  %time %alloc   %time %alloc

MAIN        MAIN                    102           0    0.0    0.0   100.0  100.0
 CAF        GHC.IO.Handle.FD        128           0    0.0    0.0     0.0    0.0
 CAF        GHC.IO.Encoding.Iconv   120           0    0.0    0.0     0.0    0.0
 CAF        GHC.Conc.Signal         110           0    0.0    0.0     0.0    0.0
 CAF        Main                    108           0    0.0    0.0   100.0  100.0
  main      Main                    204           1    0.0    0.0   100.0  100.0
   fib      Main                    205     2692537  100.0  100.0   100.0  100.0

लागत केंद्र

लागत केंद्र एक हास्केल कार्यक्रम पर एनोटेशन हैं, जो GHC संकलक द्वारा स्वचालित रूप से जोड़ा जा सकता है - -fprot-auto - या {-# SCC "name" #-} <expression> , जहां "नाम" का उपयोग करके प्रोग्रामर द्वारा कोई भी नाम जिसे आप चाहते हैं और <expression> किसी भी मान्य हास्केल अभिव्यक्ति है:

-- Main.hs
main :: IO ()
main = do let l = [1..9999999]
          print $ {-# SCC "print_list" #-} (length l)

-fprof साथ -fprof और +RTS -p साथ चलाना जैसे ghc -prof -rtsopts Main.hs && ./Main.hs +RTS -p प्रोग्राम के बाहर Main.prof ही Main.prof उत्पादन करेगा।



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