質問
Cのclock()
機能は、ちょうど私にはゼロを返します。ノー改善して、さまざまなタイプを使用してみました...これは良い精度で時間を測定するための良い方法です?
#include <time.h>
#include <stdio.h>
int main()
{
clock_t start, end;
double cpu_time_used;
char s[32];
start = clock();
printf("\nSleeping 3 seconds...\n\n");
sleep(3);
end = clock();
cpu_time_used = ((double)(end - start)) / ((double)CLOCKS_PER_SEC);
printf("start = %.20f\nend = %.20f\n", start, end);
printf("delta = %.20f\n", ((double) (end - start)));
printf("cpu_time_used = %.15f\n", cpu_time_used);
printf("CLOCKS_PER_SEC = %i\n\n", CLOCKS_PER_SEC);
return 0;
}
Sleeping 3 seconds... start = 0.00000000000000000000 end = 0.00000000000000000000 delta = 0.00000000000000000000 cpu_time_used = 0.000000000000000 CLOCKS_PER_SEC = 1000000
プラットフォーム:インテル32ビット、Redhat Linuxでは、GCC 3.4.6
解決
clock()
は、使用されるCPU時間を報告します。 sleep()
は、任意のCPU時間を使用しません。だからあなたの結果はあなたが望むものだけで、おそらく正確には正しくありません。
他のヒント
man clock
。あなたがそれだと思うものを返していません。またman gettimeofday
- それは可能性が高い何をしたいのです。
clock_tが整数型です。あなたは%fをして、それをプリントアウトすることはできません。差がある理由のためにフレッドの答えを参照してください。 0ます。
printf("start = %.20f\nend = %.20f\n", start, end);
である必要があります:
printf("start = %d\nend = %d\n", start, end);
sleep()
を呼び出すには、任意のCPU時間を使用するつもりはありません。あなたはしかし、の少しの違いが表示されるはずです。私はこのラインであなたのprintf型の不一致のバグを修正します:
printf("start = %.20f\nend = %.20f\n", start, end);
そして、それは私のマシン上で、合理的な結果を与えます:
start = 1419
end = 1485
delta = 66
cpu_time_used = 0.000066000000000
CLOCKS_PER_SEC = 1000000
あなたがプログラムを実行に費やさリアルタイムに取得するためにgettimeofday()
を試みる場合があります。
あなたはおそらく必要がある。
double get_wall_time(){
struct timeval time;
if (gettimeofday(&time,NULL)){
return 0;
}
return (double)time.tv_sec + (double)time.tv_usec * .000001;
}
などの利用に何か
このdouble wall0 = get_wall_time();
double cpu0 = get_cpu_time();
for(long int i = 0; i<=10000000;i++){
func1();
}
double wall1 = get_wall_time();
double cpu1 = get_cpu_time();
cout << "Wall Time = " << wall1 - wall0 << endl;
cout << "CPU Time = " << cpu1 - cpu0 << endl;
の代わりに、
clock()
のみとのみだけパフォーマンスカウンタに基づいてCPUに費やされた時間をカウントします。 しかし、あなたは機能の上に使用して結果を得ることができます。 ちょうどあなたのアプリケーションは、timeコマンドでそれを実行して確認してください。
time ./a.out
のような
timeコマンドの出力:
このreal 0m5.987s
user 0m0.674s
sys 0m0.134s
とカスタム関数の出力
Wall Time = 5.98505
CPU Time = 0.8