在 GHC 中自动分配成本中心
Posted
技术标签:
【中文标题】在 GHC 中自动分配成本中心【英文标题】:Automatically allocate cost centres in GHC 【发布时间】:2012-07-31 19:23:24 【问题描述】:我正在使用 GHC 7.4.1 并尝试分析一段代码。不幸的是,分析器的输出为main
函数分配了一个大成本中心,而不是为每个函数将其分解为多个成本中心。
这是我用来分析代码的过程。我很感激能指出我做错了什么。
首先,重新安装库,启用优化和分析:
cabal install -p -O2
接下来,我重新编译我想要分析的代码:
ghc -rtsopts -prof -fprof-auto -fforce-recomp --make -O2 "Main.hs"
最后,我使用一些分析选项运行它:
./Main +RTS -K100M -s -p -hy
结果如下:
COST CENTRE MODULE %time %alloc
main Main 100.0 100.0
有什么明显的我做错了吗?
【问题讨论】:
【参考方案1】:-auto-all
(-fprof-auto
,自 GHC 7.4 起)选项自动将所有***函数(包括未导出的函数)标记为成本中心。
但该选项仅影响当前编译的模块,因此可能还需要使用该选项编译库。为此,请在库的 .cabal 文件中设置 ghc-prof-options: -O2 -auto-all
(分别为 -fprof-auto
)。
注意:成本中心注释可能会对性能产生很大影响,因此-auto-all
resp。 -fprof-auto
应仅用于当前正在检查的库,其他库应使用更少的成本中心注释进行编译,如-auto
给出的分析。 -fprof-auto-top
或 -fprof-auto-exported
。
【讨论】:
我认为-auto-all
在 GHC 的较新版本中已被 -fprof-auto
取代。让我检查一下并回复你。
更新:不,这没有任何区别。
@ChrisTaylor 为此,您还需要使用 -auto-all
编译库。在 .cabal 文件中设置 ghc-prof-options: -O2 -auto-all
。
@ChrisTaylor 从 7.4 开始,没关系,目前两者都有效,-auto-all
是我仍然使用的,因为我使用的是 6.12-7.4。
你们中的一个人可能应该在新答案中发布正确的信息,而不是将其留在大部分不正确的答案中。或者我可以编辑我的,不管怎样。以上是关于在 GHC 中自动分配成本中心的主要内容,如果未能解决你的问题,请参考以下文章