理解Haskell代码的令人惊讶的GHC优化

时间:2014-05-06 18:29:53

标签: haskell optimization ghc compiler-optimization

我正在使用一些旧的Haskell代码进行攻击,并偶然发现了一个令人惊讶的优化。在进行一些分析之后,我注意到运行时在以下函数中花费了相当多的时间:

divisorCount = product . map ((+1).snd) . factorise'

我认为大多数工作都是在factorise'完成的,但为了简洁起见,我应该将功能更改为:

divisorCount = product . map (succ.snd) . factorise'

当我重新编译并重新编译程序时,令我惊讶的是,运行时从0.495s转到0.325s!这是一个非常显着的速度提升!

为什么这种简单的改变会导致如此显着的性能提升?什么GHC可以在第二个功能中优化它在第一个功能中无法实现?

注意:

  • 使用GHC版本7.6.3

  • 两个基准都是使用-O2

  • 编制的
  • 两个基准运行时间均在10次试验中摊销

0 个答案:

没有答案