2013-01-15 35 views
13

我正在致力於sorting libraryMArrays。速度很重要,所以我想盡可能優化它。如何正確優化MArray函數的速度?

目前,我只是INLINE的排序功能。與未優化的代碼相比,這加快了代碼的10倍以上。但是,如果函數在多個地方使用,則可以輕鬆地分解代碼的大小,並減慢編譯速度。

唯一的另一種選擇似乎SPECIALIZE所有現有的MArray實例的功能。這也擴大了所得到的代碼,但僅僅是一個常數因子,而不依賴於函數使用的次數。問題是,是否有可能出現新的MArray實例?或者,MArray如此特別,並且與Haskell的內部綁定,以便我可以確定沒有新的實例可以由其他模塊定義?

+0

這聽起來像你想使用INLINABLE pragma:http://www.haskell.org/ghc/docs/7.0.4/html/users_guide/pragmas.html#inlinable-pragma –

+0

@JohnL我想過那個,但是恐怕只能使用額外的SPECIALIZE pragmas,因爲排序功能可能太大而不能由GHC的決定加以內聯。但是,這種組合可能是一個合理的解決方案 - 專門針對所有當前實例,並通知用戶專注於他們聲明的任何新的MArray實例。 –

+0

如果性能非常重要,請考慮使用向量或修復。 –

回答