Zoeken…


Uw programma compileren voor profilering

De GHC-compiler heeft volwassen ondersteuning voor het compileren met profileringsannotaties.

Als u bij het compileren de vlaggen -prof en -fprof-auto , voegt u ondersteuning toe aan uw binary voor het profileren van vlaggen voor gebruik tijdens runtime.

Stel dat we dit programma hebben:

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

Zo samengesteld:

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

Vervolgens werd het uitgevoerd met runtime-systeemopties voor profilering:

./Main +RTS -p

We zullen een main.prof bestand zien dat na de uitvoering is gemaakt (zodra het programma is afgesloten), en dit geeft ons allerlei profileringsinformatie, zoals kostenplaatsen, die ons een overzicht geven van de kosten die zijn verbonden aan het uitvoeren van de verschillende delen van de code :

    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

Kostenplaatsen

Kostenplaatsen zijn annotaties op een Haskell-programma die automatisch kunnen worden toegevoegd door de GHC-compiler - met behulp van -fprot-auto - of door een programmeur met behulp van {-# SCC "name" #-} <expression> , waarbij "naam" is elke gewenste naam en <expression> is een geldige Haskell-expressie:

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

Compileren met -fprof en uitvoeren met +RTS -p bijv. ghc -prof -rtsopts Main.hs && ./Main.hs +RTS -p zou Main.prof produceren zodra het programma is afgesloten.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow