#
10.6 制限事項

このプロファイラには2つの基本的な制限事項があります。ひとつは、Python インタプリタによる 呼び出し、リターン、例外発生 とい うイベントの連携を前提にしていることです。コンパイル済みの C コード はインタプリタの管理外で、プロファイラからは``見えません''。(組込み関 数を含む) C のコードに費やされた時間は、その C コードを呼出した Python 関数のものとして計上されることになります。ただし C コードが Python のコードを呼び出す場合は、適切にプロファイルされます。

2つ目の制限はタイミング情報の正確さに関するものです。決定論的プロファ イラの正確さに関する根本的問題です。最も明白な制限は、(一般に)``クロッ ク''は .001 秒の精度しかないということです。これ以上の精度で計測するこ とはできません。仮に充分な精度が得られたとしても、``エラー''が計測の平 均値に影響を及ぼすことがあります。最初のエラーを取り除いたとしても、そ れがまた別のエラーを引き起こす原因となり...。

もうひとつの問題として、イベントを検知してからプロファイラがその時刻を 実際に取得するまでに ``いくらかの時間がかかる'' ことです。プロ ファイラが時刻を取得する(そしてその値を保存する)までの間に、ユーザコー ドがもう一度処理を実行したときにも、同様の遅延が発生します。結果的に多 く呼び出される関数または多数の関数から呼び出される関数の情報にはこの種 のエラーが蓄積する傾向にあります。

この種のエラーによる遅延の蓄積は一般にクロックの精度を越える(1クロック 以下のタイミング)ところで起きていますが、一方でこの時間を累計可 能ということが大きな意味を持っています。このプロファイラはプラットフォー ムごとに(平均値から)予想されるエラーによる遅延を補正する機能を備えてい ます。プロファイラに補正を施すと(少くとも形式的には)正確さが増しますが、 ときには数値が負の値になってしまうこともあります(呼出し回数が少く、確 率の神があなたに意地悪をしたとき :-) )。プロファイルの結果に負の値が出 力されても驚かないでください。これは補正をおこなった場合にのみ 現れることで、実際の計測結果は補正をおこなわない場合より、より正確なは ずだからです。