Szukam możliwości optymalizacji w moim programie Haskell, kompilując się z -prof
, ale nie wiem, jak interpretować centra kosztów, które zawierają elipsy. Co to są filter.(...)
i jankRoulette.select.(...)
?Co znaczy. (...) w raporcie .prof?
COST CENTRE MODULE %time %alloc
filter.(...) Forest 46.5 22.3
set-union Forest 22.5 4.1
cache-lookup Forest 16.0 0.1
removeMany MultiMapSet 3.7 1.9
insertMany MultiMapSet 3.3 1.8
jankRoulette.select.(...) Forest 1.4 15.2
I generowane że z: $ ghc --make -rtsopts -prof -auto-all main.hs && ./main +RTS -p && cat main.prof
Funkcja filter
ma kilka definicji w where
klauzuli, na przykład:
filter a b = blahblah where
foo = bar
bar = baz
baz = bing
Ale ci wszyscy pojawiają się jako filter.foo
, filter.bar
, etc
Myślałem, że mogą być zagnieżdżone, ale wyrażenia, ale jankRoulette.select
nie ma żadnych. Dodałem też dyrektywy SCC przed większością z nich, bez żadnego z tych centrów powstawania kosztów.
Ponieważ większość czasu spędzam w filter.(...)
, chciałbym wiedzieć, co to jest. :)
Jako że komentarz 'TODO' w cytacie Bennofsa powinien sugerować, raporty profilera GHC (i prawie wszystko, co kompilator wypisze) powinny zawsze być połączone z wynikiem' ghc --version'. – dfeuer
Dzięki za przypomnienie! Jeśli chodzi o potomstwo, to na pewno pracuję nad systemem kompilacji Glorious Glasgow Haskell, wersja 7.8.1. – alltom