分析多态的成本?

时间:2012-07-18 10:07:30

标签: haskell profiling polymorphism ghc

我有一个“不必要”多态的代码库,因为几乎每个函数在某种程度上都是多态的(为什么不是,什么时候可以?),但是最终程序只使用少数具体类型的函数。我已经开始花费一些时间投入SPECIALIZEINLINABLE pragma来试图降低所有这些多态性的性能成本,但是随着我的代码的大小,它非常受欢迎。对于每个函数,有没有办法分析在运行时花费多少时间“完成多态性需要的东西”?

(注意:我已经问过这个问题而不知道这样的事情在技术上是否可能,或者“多态性需要的东西”是否足够明确)。

1 个答案:

答案 0 :(得分:8)

确定成本的过程是:

  • 构建基准 - 使用标准或其他一些衡量工具
  • 个人资料 - 使用ghc的分析支持
  • 阅读核心 - 如果性能原因不明显,请使用ghc-core

通常,您会发现一些操作太慢;通过分析进行编译并精确确定哪些组件成本很高,然后检查代码以对其进行优化(例如,通过专门化数据结构或功能,更改算法或进行其他更改)。

对于性能关键的工作,您将去检查Core以查看编译器是否可以提供微调。