Я ищу возможности оптимизации в своей программе Haskell, компилируя с помощью -prof
, но я не знаю, как интерпретировать центры затрат, которые содержат эллипсы. Что такое filter.(...)
и jankRoulette.select.(...)
?
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
Я сгенерировал это с помощью: $ ghc --make -rtsopts -prof -auto-all main.hs && ./main +RTS -p && cat main.prof
Функция filter
имеет несколько определений в предложении where
, например:
filter a b = blahblah where
foo = bar
bar = baz
baz = bing
Но все они отображаются как filter.foo
, filter.bar
и т.д.
Я думал, что они могут быть вложенными, пусть выражения, но jankRoulette.select
не имеет. И я добавил директивы SCC перед большинством из них, без каких-либо из этих центров затрат, поднимающихся на вершину.
Поскольку большую часть времени тратится на filter.(...)
, я хотел бы знать, что это такое.:)