수색…


프로파일 링을위한 프로그램 컴파일

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