【发布时间】:2015-07-24 01:49:54
【问题描述】:
我正在通过使用-prof 编译来在我的 Haskell 程序中寻找优化机会,但我不知道如何解释包含省略号的成本中心。 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 等。
我认为它们可能是嵌套的 let 表达式,但 jankRoulette.select 没有。而且我在大多数指令前面添加了 SCC 指令,而没有任何成本中心上升到顶部。
由于大部分时间都花在filter.(...),我想知道那是什么。 :)
【问题讨论】:
-
正如代码 bennofs 引号中的
TODO注释所暗示的那样,GHC 分析器报告(以及编译器输出的几乎所有内容)应始终伴随着ghc --version的结果。 -
感谢提醒!为了后代,我碰巧正在运行 Glorious Glasgow Haskell 编译系统,版本 7.8.1。