内部模块的跨模块内联

时间:2014-06-23 09:58:45

标签: haskell optimization inline ghc cabal

我有一个包含大量内部模块的cabal包(other-modules字段)。我相信我会从内嵌大部分功能中受益。

我是否必须通过他们所有插入pragma或GHC和Cabal是否足够智能自己进行内联?如果是,那么这个内联将如何执行?否则我必须通过插入一个pragma,我应该选择哪一个:INLINEINLINABLE(或者甚至是合成的inline function) - 以及出于什么原因?

1 个答案:

答案 0 :(得分:1)

GHC将在高水平的优化方面做得非常好。

如果在检查Core和分析后,确定某些函数没有内联,则可以使用INLINABLE或INLINE来增加内联发生的可能性。

Recall

  

INLINE编译指示的主要作用是声明函数的“成本”非常低。正常的展开机器将非常热衷于内联。

     

虽然INLINE说"请内联我",INLINABLE说"随意内联我;使用你自己的判断"

INLINABLE通常是更好的选择,因为您不知道所有通话网站的外观。

但是,如果您对自己进行了分析并且对性能不满意,那么这样做才有意义,并且可以证明通过内联提高了性能。