voile.benchmark
性能評価に関するモジュール
ベンチマークのヘルパクラスや、所定位置を通過した時間の記録、呼び出された回数
などを記録することのできるクラスを用意した。
関数の実行にかかる時間を短縮し、スピードアップするのに役に立つかもしれない。
- Benchmark
- FootPrint
- CallCounter
Date:
December 08, 2008
Author:
P.Knowledge, SHOO
Lisence:
NYSL ( http://www.kmonos.net/nysl/ )
- class
Benchmark
;
- ベンチマーククラス
基準関数と、施行関数を設定し、どちらのほうが性能が良いかを比較検証するための
ベンチマーククラス。
主な使用例は以下。
int func1(int a, int b)
{
return a+b;
}
int func2(int a, int b)
{
return a*b + a/b;
}
void main()
{
int a = 0;
int b = 1;
scope benchmark = new Benchmark({a = func1(a,b);},{a = func2(a,b);});
benchmark.exec;
if ( benchmark.point < 1 )
{
throw new Exception("CPUが変なんですけど!ww");
}
}
- this(Func aBase, Func aTarget, ulong aCount = 65535);
- コンストラクタ
関数を設定し、使用できる状態にする。
Params:
Func aBase |
基準となる関数(delegate) |
Func aTarget |
aBaseと比較して、性能を評価する試行関数(delegate) |
ulong aCount |
それぞれの関数を呼び出す回数 |
- void
count
(ulong aCount);
- カウント数
繰り返し回数を設定する。
重い処理でこの数値を大きくすると、途方もない時間がかかる可能性がある。
Params:
- ulong
count
();
- カウント数
何回繰り返して評価するかを返す。
Returns:
繰り返し回数
- void
exec
();
- 評価の実行
繰り返し評価を行い、性能を評価する。
- real
point
();
- 評価値を返す
性能の評価を、基準関数の実行時間と施行関数の実行時間を比較し、倍数で返す。
高いほど試行関数の性能がいい。
Returns:
試行関数は、基準関数に対し、この倍数の速度で実行された。
- Ticks
targetTime
();
- 施行関数の所要時間
Retuns:
施行関数の試行に使用された時間
- Ticks
baseTime
();
- 基準関数の所要時間
Retuns:
基準関数の試行に使用された時間
- class
FootPrint
;
- 足跡を記録する
このクラスは、ファイルと行番号ごとに足跡をつけ、前回の足跡からどの程度の時間
が経過したかを記録し、時間がかかっている個所を特定するためのクラスです。
void main()
{
scope fp = new FootPrint;
fp.stamp(__FILE__,__LINE__);
func1();
fp.stamp(__FILE__,__LINE__);
func2();
fp.stamp(__FILE__,__LINE__);
Stdout("Stamp infomations").newline;
foreach (d; fp.result)
{
Stdout.formatln("{}({}): {} sec", d.file, d.line, d.time.interval);
}
}
- struct
Data
;
- 記録されるデータ
- string
file
;
- ファイル名
- uint
line
;
- 行番号
- Ticks
time
;
- 時間
- this();
- コンストラクタ
ついでに計測をスタートする
- synchronized void
start
();
- 測定を開始する
ただし、コンストラクタでも呼ばれるため、必ず呼び出さなければならないわけ
ではない。
- synchronized void
stamp
(char[] file, uint line);
- 足跡を踏む
足跡を踏み、ファイル名と行番号を記録する
- synchronized Data[]
result
();
- 結果を返す
注意点として、ストップするための関数は存在しないため、結果が得たくなった
その時にこの関数を呼び出すとよい。
- class
CallCounter
;
- 呼び出しの情報を記録する
このクラスは呼び出した回数を記録する。呼び出された回数が多いほどその周囲は
時間に気をつけるようにするとよい。
- struct
Data
;
- 記録されるデータ
- string
file
;
- ファイル名
- uint
line
;
- 行番号
- ulong
count
;
- 回数
- void
call
(char[] file, uint line);
- 呼び出す
この関数を呼び出すことで、その場所の呼び出し回数カウントしていく。
- Data[]
result
();
- 結果を返す
このクラスは呼び出した回数を記録する。呼び出された回数が多いほどその周囲は
時間に気をつけるようにするとよい。
|