Suche…


Kompilieren Ihres Programms zur Profilerstellung

Der GHC-Compiler bietet eine ausgereifte Unterstützung für das Kompilieren mit Profilierungsanmerkungen.

Durch die Verwendung der -prof und -fprof-auto beim Kompilieren wird Ihrer Binärdatei Unterstützung für die Profilerstellung zur Laufzeit zur Verfügung gestellt.

Angenommen, wir haben dieses Programm:

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

Es so zusammengestellt:

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

Dann lief es mit Laufzeitsystemoptionen für das Profiling:

./Main +RTS -p

Es wird eine main.prof Datei nach der Ausführung erstellt (sobald das Programm beendet wurde). main.prof wir alle Arten von Profilierungsinformationen, z. B. Kostenstellen, die uns eine Aufschlüsselung der Kosten für die Ausführung der verschiedenen Teile des Codes geben :

    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

Kostenstellen

Kostenstellen sind Anmerkungen zu einem Haskell-Programm, die vom GHC-Compiler automatisch hinzugefügt werden können - mit -fprot-auto - oder von einem Programmierer mit {-# SCC "name" #-} <expression> , wobei "name" steht Ein beliebiger Name und <expression> ist ein beliebiger Haskell-Ausdruck:

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

Das Kompilieren mit -fprof und das Ausführen mit +RTS -p z. B. ghc -prof -rtsopts Main.hs && ./Main.hs +RTS -p würde Main.prof erzeugen, wenn das Programm beendet wird.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow