3

を使用してプログラムの開発を続けIxSetていますが、何か間違っているかどうか (または最適化できるかどうか) に興味があります。現在、必要以上に多くのメモリを消費しています。

プログラムはこちら: https://bitbucket.org/k_bx/duplicates プロファイリング結果はこちら: https://gist.github.com/4602235

ps: 作成できないので、誰か「ixset」タグを追加してください。

アップデート:

-h を使用したメモリ プロファイリング: http://img-fotki.yandex.ru/get/6442/72443267.2/0_9d04d_4be1cd9f_orig

更新 2:

同じ -h ファイルのきちんとしたメモリ プロファイリング ビュー: http://heap.ezyang.com/view/c1781ec5e53b00d30a9f8cd02f0b8a5e777674c9#form

4

1 に答える 1

1

バニラヒーププロファイリングを使用しているだけで、データ構造の使用状況を必ずしもキャプチャするわけではありません。ご指摘のとおり、コードの関数ごとにヒープを分解します。必要なものを取得するためにプロファイラーに渡すことができるいくつかのオプションがあります (ghc ガイドから: http://www.haskell.org/ghc/docs/latest/html/users_guide/prof-heap.html#rts-options- heap-prof )

-hc (-h に短縮できます)。データを生成したコスト センター スタック別にグラフを分類します。

-hm データを生成したコードを含むモジュールごとにライブ ヒープを分割します。

-hd グラフをクロージャの説明で分類します。実際のデータの場合、説明は単なるコンストラクター名であり、他のクロージャーの場合は、コンパイラーが生成したクロージャーを識別する文字列です。

-hy グラフをタイプ別に分類します。関数型または未知/ポリモーフィック型を持つクロージャーの場合、文字列は実際の型の近似値を表します。

-hr リテーナ セット別にグラフを分割します。

-hb グラフを伝記別に分類します。経歴プロファイリングについては、以下で詳しく説明します

hm、hd、および hr は、おそらく最も役立つでしょう。また、少し考えれば、hb を使用して厳密性に関する情報を取得することもできます。

于 2013-02-01T15:38:10.750 に答える