Haskell Language
最適化
サーチ…
プロファイリングのためのプログラムのコンパイル
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
コストセンター
原価センタはHaskellプログラム上の注釈で、GHCコンパイラ( -fprot-auto
を使用)または{-# SCC "name" #-} <expression>
-fprot-auto
{-# SCC "name" #-} <expression>
を使用するプログラマが自動的に追加できます。任意の名前を指定し、 <expression>
は任意の有効なHaskell式です。
-- Main.hs
main :: IO ()
main = do let l = [1..9999999]
print $ {-# SCC "print_list" #-} (length l)
-fprof
でコンパイルし、 +RTS -p
実行する例ghc -prof -rtsopts Main.hs && ./Main.hs +RTS -p
は、プログラムが終了するとMain.prof
を生成します。
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow