如何正确优化MArray功能以提高速度?

Pet*_*lák 13 arrays performance haskell ghc marray

我正在为MArrays开发一个排序库.速度很重要,所以我想尽可能地优化它.

目前,我只是INLINE的排序功能.与未优化的代码相比,这可以将代码加速10倍以上.但是,如果在多个位置使用这些函数,这很容易破坏代码大小,并减慢编译速度.

唯一的另一种选择似乎是SPECIALIZE MArray的所有现有实例的函数.这也会扩大生成的代码,但只能通过一个常数因子,这不取决于函数的使用次数.问题是,是否有可能出现新的MArray实例?或者是MArray如此特殊并且绑定到Haskell的内部,以便我可以确定其他模块不能定义新实例?

Pet*_*lák 3

看来最好的方法是使用INLINE编译指示。sort来自向量算法 也使用它