2011-10-03 3 views
3

프로파일 링이 활성화 된 GHC로 Haskell 프로그램을 컴파일했습니다.GHC/Haskell 프로파일 링 : 함수가 호출되지 않고 시간을 소비 함

$ ./server + RTS -M6m -p는

내가 좋아하는 프로필을 얻을 -rts :

            individual inherited 
COST CENTRE  MODULE   no. entries %time %alloc %time %alloc 

poke_a4u64  Generator  2859  56436 0.0 0.0  0.4 0.4 
storeParameter Generator  2860   0 0.4 0.4  0.4 0.4 
    ppCurrent  Generator  2866  56436 0.0 0.0  0.0 0.0 
    ppFeedback  Generator  2861  56436 0.0 0.0  0.0 0.0 

그것은 storeParameter가 호출되지 않습니다처럼 보이지만 시간과 메모리를 소모합니다. storeParameter는 ppCurrent를 호출하기 때문에 ppCurrent와 같이 storeParameter가 56436 번 호출됩니다. 왜 표시되지 않습니까?

+1

가능한 경우 프로파일 링중인 코드를 확인하는 것이 좋습니다. – fuz

답변

0

entries 열이 내 코드에 있음을 발견했습니다. 예 : main 전화하기 6 번!

그래서 나는 그것에 대해 너무 걱정하지 않을 것입니다.

+0

'entries'는 함수가 호출 된 횟수가 아닙니다. 이것은 콜 그래프 노드가 입력 된 횟수입니다. 둘은 동일하지 않습니다. –

+0

@ JohnL : 아직도'main'의 콜 그래프 노드를 두 번 이상 입력해야하는 이유는 무엇입니까? 아무 재귀 또는 아무것도 : 그냥 명령 줄에서 매개 변수를 읽고, stdout에 몇 가지 물건을 인쇄, 순수한 기능을 평가하고 디스크에 결과를 저장 "똑같은 일을. – ivanm

+0

내 부분에는 추측되지만 시스템 호출에서'main'으로 돌아갈 수 있습니까? 문서가 조금 더 철저한다면 좋을 것입니다. –

4

ghc 프로파일 링의 버그입니다. 해결 방법을 모르지만 Simon M은 다음 릴리스에서 개선 할 것이라고 약속했습니다.

+1

GHC Trac 티켓에 대한 링크가 있습니까? – hammar

+0

Trac 티켓이 있는지 기억이 나지 않지만 Simon M과 이야기를 나누었습니다. – augustss