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
코스트 센터
코스트 센터는 GHC 컴파일러 ( -fprot-auto
사용) 또는 {-# SCC "name" #-} <expression>
사용하는 프로그래머가 자동으로 추가 할 수있는 Haskell 프로그램의 주석입니다. 여기서 "name"은 원하는 모든 이름과 <expression>
은 유효한 하스켈 표현식입니다.
-- 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