編譯你的分析程式

GHC 編譯器已經成熟地支援使用分析註釋進行編譯。

在編譯時使用 -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