質問

GHCで書かれたHaskellのプログラムをプロファイリングする場合は、

、型クラスの関数の名前は、他からそれらの1つのインスタンスの実装を区別するために.profファイルにマングルされています。どのように私はそれがどのタイプのインスタンスを見つけるためにこれらの名前をデマングルすることができますか?

は例えば、私は種類のFastSlowShowを実装して、次の両方のプログラムを、持っていると仮定します

import Data.List (foldl')

sum' = foldl' (+) 0

data Fast = Fast
instance Show Fast where
    show _ = show $ sum' [1 .. 10]

data Slow = Slow
instance Show Slow where
    show _ = show $ sum' [1 .. 100000000]

main = putStrLn (show Fast ++ show Slow)

私は-prof -auto-all -caf-all+RTS -pし、実行してコンパイルします。生成されます.profファイルでは、私はトップのコストセンターであることがわかります:

COST CENTRE                    MODULE               %time %alloc

show_an9                       Main                  71.0   83.3
sum'                           Main                  29.0   16.7

ツリーで、Iは、同様に、(無関係な行を省略)参照

                                                individual    inherited
COST CENTRE       MODULE       no.    entries  %time %alloc   %time %alloc

  main            Main         232           1   0.0    0.0   100.0  100.0
   show_an9       Main         235           1  71.0   83.3   100.0  100.0
    sum'          Main         236           0  29.0   16.7    29.0   16.7
   show_anx       Main         233           1   0.0    0.0     0.0    0.0

私はshow_an9Slowなくshowの?

Fastの実装であることをどのように把握します
役に立ちましたか?

解決

はありませんあなたがすることはできません。 _an9_anx部分はランダムに生成されます。 (私は再びコンパイルするとき、私は_ane_anCを得ました。)

あなたは手動でコストセンターを挿入するためにSCC(セット・コストセンター)プラグマを使用することができます:

data Fast = Fast
instance Show Fast where
    show _ = {-# SCC "show(Fast)" #-} show $ sum' [1 .. 10]

data Slow = Slow
instance Show Slow where
    show _ = {-# SCC "show(Slow)" #-} show $ sum' [1 .. 100000000]

プロフィールが表示されるはずです。

  main
   show_an9
    show(Slow)
     sum'
   show_anx
    show(Fast)
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top