2016-05-16 25 views
9

Próbuję profilować niektóre kody Haskell za pomocą narzędzi profilowania GHC. Centrum kosztów, które mnie najbardziej interesuje, jest obecnie zdominowane przez pakiet kodu inicjalizacyjnego, którego tak naprawdę nie obchodzi.Profil tylko pojedyncza funkcja (lub centrum kosztów) z GHC

Mój kod wygląda mniej więcej coś takiego:

main = do 
    x <- lotsOfInitialization 
    print $ {-# SCC "myCostCenter" #-} interestingPart x 

W moim faktycznym kodzie lotsOfInitialization część trwa ~ 98% czasu, a więc trudno jest zobaczyć z każdej ziarnistości, co dzieje się wewnątrz interestingPart.

Myślałem, że wystarczy tylko adnotacja w jednym miejscu (i nie używanie -fprof-auto), ale raport, który otrzymuję, pokazuje wszystkie wywołania funkcji.

Próbowałem też adnotacji o rygorystyczności na x, ale to niczego nie zmieniło.

Czy jest jakiś sposób, aby powiedzieć GHC, aby zignorował kod inicjujący lub skupił się tylko na częściach, które chcę?

Odpowiedz

2

Zgodnie z ghc manual można profilować sterty w niektórych miejscach powstawania kosztów, np. używając -hc⟨name⟩ lub -hy⟨type⟩.

Nie mogłem znaleźć rozwiązania, które ma coś podobnego do profilowania czasu.

EDIT:

zrobiłem actuall uda się znaleźć sposób, aby wygodnie zrobić co trzeba zarówno alokacji czasu i profilowania. Jeśli korzystasz z wizualizatora profiteur dla plików , możesz spojrzeć na profil wydajności tylko określonego miejsca powstawania kosztów jako ładnie sformatowanej mapy drzewa.