Haskell Language
अनुकूलन
खोज…
प्रोफाइलिंग के लिए अपने कार्यक्रम का संकलन
जीएचसी संकलक के पास प्रोफाइलिंग एनोटेशन के संकलन के लिए परिपक्व समर्थन है ।
का उपयोग करते हुए -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
उत्पादन करेगा।