性能評価・プロファイリング
1回あたり20 nsで終わる関数fが、何百万回も呼ばれる。これを、関数の入口と出口に記録の処理を入れる計測方式のプロファイラで測る。記録の処理に1回の呼び出しあたり合わせて60 nsかかり、その時間がすべてfの時間に数えられるとすると、計測されるfの時間は本来の何倍になるか。
- A3倍
- B4倍
- C変わらない(1倍)
答えと解説を見る
正解:B. 4倍
計測されるfの1回あたりの時間は、本来の20 nsに記録の60 nsが加わって80 nsになり、80÷20 = 4倍です。このように、測るための仕組みが、測りたいものの動きそのものを変えてしまう現象をプローブ効果といいます。記録の処理はキャッシュの中身も入れ替えるので、実際にはさらに遅くなることもあります。小さな関数が多いプログラムでは、時間の割合をサンプリング方式で測ったり、測定の手間そのものを差し引いて考えたりします。
- A. 記録の60 nsを本来の20 nsで割った値(60÷20 = 3)と取り違えています。
- B. 正しい。(20+60)÷20 = 4倍です。
- C. 記録の処理にも時間がかかるので、計測される時間は長くなります。