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 aCount 繰り返し回数

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 ();
結果を返す

このクラスは呼び出した回数を記録する。呼び出された回数が多いほどその周囲は 時間に気をつけるようにするとよい。

Page was generated with on Fri Apr 3 17:07:43 2009