Back to page

− Links

 Print 

SampleCodes​/Phobos​/時間計測​/2 :: D言語友の会

wiki:SampleCodes/Phobos/時間計測/2


Table of contents
  • 概要
  • ポイント
  • サンプルコード
  • 実行結果
  • 投票とコメント

概要 anchor.png[3] Edit [4]

2つの処理を、どちらが高速かベンチマークして比較する。

Page Top

ポイント anchor.png[5] Edit [6]

std.datetimeにある、comparingBenchmarkというテンプレート関数[7]を使用します。

サンプルコードの例は、平均値の計算を、lrint関数を使用する処理と、0.5加算して小数点以下の切り捨てを行う処理の2つがどちらがより高速かを計測します。

Page Top

サンプルコード anchor.png[8] Edit [9]

Everything is expanded.Everything is shortened.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
 
 
 
-
|
|
|
-
|
!
-
|
!
|
|
|
|
!
import std.stdio, std.math, std.datetime;
 
void main(string[] args)
{
    double a = 100.46;
    int c;
    auto result = comparingBenchmark!(
    {
        c += cast(int)lrint(a);
    },
    {
        c += cast(int)(a + 0.5);
    })();
    
    writeln(result.point);
    writefln("base: %dus", result.baseTime.usecs);
    writefln("target: %dus", result.targetTime.usecs);
}
Page Top

実行結果 anchor.png[10] Edit [11]

1
2
3
4
$ dmd -run main
1.53947
base: 100us
target: 64us

1つ目(base)に指定した「lrintを使う処理」より、1.53947倍、2つ目(target)に指定した「0.5加算して小数点以下の切り捨てを行う処理」が高速に動作するという結果になりました。


Page Top

投票とコメント anchor.png[12] Edit [13]

Choices Vote
大変参考になった1  
参考になった0  
あまり参考にならなかった0  
まったく参考にならなかった0  

No comment. コメント​/SampleCodes​/Phobos​/時間計測​/2Edit[14]

Name:

Last-modified: 2012-08-19 (Sun) 02:47:19 (JST) (3448d) by ゲスト