質問

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top