0

整列されていないビットと整列されていないビットをバイナリファイルに読み書きする速度の違いを測定しようとしています。timeプログラムの平均実行時間をサンプリングするために使用できるユーティリティ(何度も何度も実行して自分で書く場合を除く)があることを知りたいです(LinuxベースのOSを実行しています)?

ありがとう

4

2 に答える 2

0

これをヘッダーファイルに入れます:

#ifndef TIMER_H
#define TIMER_H

#include <stdlib>
#include <sys/time.h>

typedef unsigned long long timestamp_t;

static timestamp_t

get_timestamp ()
{
  struct timeval now;
  gettimeofday (&now, NULL);
  return  now.tv_usec + (timestamp_t)now.tv_sec * 1000000;
}
#endif

使用する .c ファイルにヘッダー ファイルをインクルードし、次のようにします。

#define N 10000
int main()
{
    int i;
    double avg;
    timestamp_t start, end;

    start = get_timestamp();
    for(i = 0; i < N; i++)
        foo();
    end = get_timestamp();
    avg = (end - start) / (double)N;

    printf("%f", avg);
    return 0;
}

基本的に、これは N 回のパフォーマンスを測定しようとしている関数を呼び出します。この場合、N は定義された定数です (そうである必要はありません)。for ループの前と for ループの後にタイムスタンプを取得し、関数の実行にかかった平均時間を計算します。get_timestamp() 関数はマイクロ秒数を返すので、ミリ秒が必要な場合は 1000 で割り、秒 - 1000000 で割ります。

于 2013-03-31T22:43:08.833 に答える