Profile
Profile.@profile
── マクロ
これ以降のメソッドはエクスポートされないので、Profile.print()
などとして呼び出す必要があります。
Profile.clear
── 関数
Profile.print
── 関数
print([io::IO = stdout,] [data::Vector]; kwargs...)
性能測定の結果を io
に出力します。io
のデフォルト値は stdout
です。ベクトル data
を渡さないと、内部バッファに積まれたバックトレースが使われます。
キーワード引数には次のキーワードの任意の組み合わせを指定できます:
-
format
: バックトレースの出力に木構造を表すインデントを付けるか (:tree
) 付けないか (:flat
) を指定します。デフォルトは:tree
です。 -
C
:true
だと、C と Fortran コードからのバックトレースが表示されます。デフォルトはfalse
です。 -
combine
:true
(デフォルト) だと、コードの同じ行に対応する命令ポインタがマージされます。 -
maxdepth
::tree
形式の出力におけるインデントの深さを制限します。 -
sortedby
::flat
形式の出力における順序を制御します。:filefuncline
(デフォルト) にすると関数が定義されたソースファイルと行番号でソートされ、:count
にすると収集されたバックトレースに考えている関数が含まれる回数でソートされ、:overhead
にすると収集されたバックトレースの底に考えている関数が含まれる回数でソートされます。 -
noisefloor
: 考えている行のサンプル数をn
, その行を呼び出した関数のサンプル数をN
としたときに、n <= noisefloor * √N
が成り立つサンプルを出力しません (:tree
形式のときにだけ意味を持ちます)。ヒューリスティックで計算されるサンプルノイズの上限を超えるフレームだけを出力するということです。デフォルトは0
であり、最初に試す値として2.0
が提案されます。 -
mincount
:mincount
回以上現れた行だけを出力します。 -
recur
::tree
形式における再帰の扱いを制御します。:off
(デフォルト) だと木は通常通りに出力されます。:flat
だと再帰が圧縮されて出力され、自分自身を呼び出す部分が一つにまとめられます。:flatc
は:flat
と同じですが、加えて C フレームを崩して表示します (jl_apply
の周りに様々な関数が表示されます)。
print([io::IO = stdout,] data::Vector, lidict::LineInfoDict; kwargs...)
性能計測の結果を io
に出力します。このバージョンは retrieve
で出力された結果を調べるのに使われます。ベクトル data
にバックトレースを、辞書 lidict
に行番号の情報を渡してください。
キーワード引数の説明は Profile.print([io], data)
を見てください。
Profile.init
── 関数
init(; n::Integer, delay::Real))
バックトレースを取得する間隔を delay
秒に、記録される命令ポインタの個数を最大 n
個に設定します。一つの命令ポインタは一行のコードに対応し、通常バックトレースは命令ポインタの長いリストで構成されます。デフォルトの設定は引数を付けずにこの関数を呼ぶと取得できます。設定するにはキーワード引数として個別に値を渡すか、(n, delay)
という順番で位置引数として値を渡してください。
Profile.fetch
── 関数
Profile.retrieve
── 関数
retrieve() -> data, lidict
測定結果をポータブルなフォーマットで "エクスポート" します。全てのバックトレースを含む data
と、data
に含まれる命令ポインタをファイル名・関数名・行番号を表す LineInfo
に対応付ける辞書 lidict
を返します。この関数を使うと性能計測の結果を保存して以降の解析で利用できるようになります。
Profile.callers
── 関数
callers(funcname,
[data,
lidict],
[filename=<filename>],
[linerange=<start:stop>]) -> Vector{Tuple{count, lineinfo}}
以前の性能計測結果を受け取り、特定の関数を呼び出した関数を返します。ファイル名 (および関数が定義された行番号の範囲) を指定することでオーバーロードされたメソッドの曖昧性を取り除くことができます。返り値は呼び出し側の呼び出し回数と行番号情報を要素とするベクトルです。省略可能引数 data
には retrieve
で取得したバックトレースを取得でき、指定しなければ現在の内部バッファが使われます。
Profile.clear_malloc_data
── 関数
clear_malloc_data()
julia
を --track-allocation
で起動したときに記録されるメモリアロケートのデータをクリアします。テストしたいコマンドを一度実行し (JIT コンパイルを行わせて) から clear_malloc_data
を呼び出し、それからコマンドをもう一度実行し、Julia を終了し、生成された *.mem
ファイルを調べるという手順を踏んでください。