在 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 中自动分配成本中心的主要内容,如果未能解决你的问题,请参考以下文章

GHC Haskell 中啥时候自动记忆?

GHC Haskell 中的自动记忆功能是啥时候?

OVF3为订单原因分配成本中心时报错“成本中心未定义”,消息号:VT806

人工智能如何创建自动驾驶数据中心

自动排产软件如何规划配送中心

DHCP服务(自动分配IP绑定固定IP)