有没有办法用GHC分析每个模块的编译时间?

时间:2017-11-22 21:26:07

标签: haskell ghc

我认为所有内容都在标题中,但要提供更多背景信息。我们有两个70多个软件包,它们的编译时间差异很大:一个是另一个需要两倍的时间(不考虑并行化)。我想知道哪些模块花费的时间最多,以便更好地了解造成这种差异的原因。

2 个答案:

答案 0 :(得分:1)

现在,当您使用 -ddump-to-file -ddump-timings 构建时,GHC 可以输出每个模块的计时数据。这会导致将扩展名为 .dump-timings 的文件写入您的构建目录(通常 .stack-work 表示 Stack,dist-newstyle 表示 Cabal)。

我编写了一个工具来查找所有这些文件并将它们可视化:https://github.com/codedownio/time-ghc-modules

答案 1 :(得分:0)

不确定您是否意味着70多个或70 + 模块,但无论如何......

我无法想到任何特别简单的方法。当GHC将其消息写入控制台时,您可以尝试准确计时;我不确定会有多准确。否则,我猜你必须弄清楚正确的编译顺序,并手动调用GHC来一次编译一个模块,并使用操作系统级工具来计算每个编译命令需要多长时间。 (也许GHC的自动Makefile生成功能可以帮助...)

可能在启用分析的情况下编译GHC本身,但在这种情况下我不认为这有帮助。 (并且它做了很多工作。)

FWIW,我也想知道为什么有些模块会花费很少的时间进行编译,而其他模块几乎是即时的......