18

我有一个“不必要”多态的代码库,因为几乎每个函数都以某种方式是多态的(为什么不呢,什么时候可以?),但最终程序使用的函数只有少数具体类型。我已经开始花一些时间投入SPECIALIZEINLINABLE编译指示来尝试降低所有这些多态性的性能成本,但是对于我的代码大小来说,它是非常偶然的。有没有办法从分析中得知每个函数在运行时“做多态性需要的事情”花费了多少时间?

(注意:我问过这个问题时不知道这样的事情在技术上是否可行,或者“多态性需要的东西”是否定义得足够好)。

4

1 回答 1

8

确定成本的过程是:

  • 构建基准 - 使用标准或其他一些测量工具
  • 配置文件 - 具有 ghc 的配置文件支持
  • 读核心——用ghc-core,如果性能原因不明显

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

对于性能关键的工作,您将去检查内核,看看微调编译器是否有帮助。

于 2012-07-18T14:11:13.567 回答