コアサーバーV2プランご契約でドメイン更新費用が永久無料
OutlinePackage
voile.benchmark
Benchmark
count
count
exec
point
targetTime
baseTime
FootPrint
Data
file
line
time
start
stamp
result
CallCounter
Data
file
line
count
call
result
voile
all
allocator
benchmark
dgfn
judge
math
thread
time

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