2013-01-15 14 views
13

私はのMArraysに取り組んでいます。スピードは重要なので、私はできるだけそれを最適化したい。速度のためにMArray関数を適切に最適化する方法は?

現在、私は単にINLINEソート機能を使用しています。これにより、最適化されていないコードと比較して、コードが10倍以上高速化されます。しかし、関数がいくつかの場所で使用され、コンパイルが遅くなると、コードサイズが簡単に爆発する可能性があります。

唯一の代替案は、MArrayの既存のすべてのインスタンスの機能をSPECIALIZEするようです。これはまた、結果のコードを拡大しますが、関数が何回使用されるかに依存しない一定の係数によってのみ拡張されます。問題は、MArrayの新しいインスタンスが現れる可能性があるということですか?あるいはMArrayはとても特別で、Haskellの内部にバインドされているので、他のモジュールでは新しいインスタンスを定義することはできません。

+0

INLINABLEプラグマを使用したいと思うようです:http://www.haskell.org/ghc/docs/7.0.4/html/users_guide/pragmas.html#inlinable-pragma –

+0

@JohnL私はそれについて考えましたGHCの判断では並べ替え関数が大きすぎてインライン展開できない可能性があるため、追加のSPECIALIZEプラグマでのみ動作するのではないかと心配です。しかし、この組み合わせは合理的な解決策である可能性があります - 現在のすべてのインスタンスに特化し、ユーザーが宣言した新しい 'MArray'インスタンスを特化するように通知します。 –

+0

パフォーマンスが本当に重要な場合は、代わりにベクトルまたはrepaを使用することを検討してください。 –

答えて

関連する問題