Recherche…


Compiler votre programme pour le profilage

Le compilateur GHC prend en charge la compilation des annotations de profilage.

L'utilisation des -prof et -fprof-auto lors de la compilation ajoutera un support à votre fichier binaire pour le profilage des indicateurs à utiliser lors de l'exécution.

Supposons que nous ayons ce programme:

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

Compilé comme ça:

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

Puis l'a exécuté avec les options du système d'exécution pour le profilage:

./Main +RTS -p

Nous verrons un fichier main.prof créé après exécution (une fois le programme terminé), ce qui nous fournira toutes sortes d’informations de profilage telles que les centres de coûts, ce qui nous donnera une ventilation des coûts associés à l’exécution des différentes parties du 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

Centres de coûts

Les centres de coûts sont des annotations sur un programme Haskell qui peuvent être ajoutées automatiquement par le compilateur GHC - en utilisant -fprot-auto - ou par un programmeur utilisant {-# SCC "name" #-} <expression> , où "name" est n'importe quel nom que vous souhaitez et <expression> est une expression Haskell valide:

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

Compiler avec -fprof et exécuter avec +RTS -p par exemple ghc -prof -rtsopts Main.hs && ./Main.hs +RTS -p produirait Main.prof une fois le programme Main.prof .



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow