0

削除しました、ごめんなさい.........................................。

4

3 に答える 3

1

を使用n=30すると、プログラムは非常に少量の作業を行うため、粗いclock粒度でゼロ時間として表示されます。一部のシステムでは、clock10ms ごとに 1 回ティックします。かなり高速なコンソール I/O を使用していると仮定すると、おそらく数十または数百マイクロ秒の範囲にあり、おそらく 99.99% の時間をprintf.

1000000 のような大きな数値を入力してみてください。そうすると、ゼロ以外の数値が得られるはずです。

于 2013-03-01T04:59:02.653 に答える
0

これを試して

struct timeval start, end;
long mtime, secs, usecs;    

gettimeofday(&start, NULL);
// your processing.
gettimeofday(&end, NULL);
secs  = end.tv_sec  - start.tv_sec;
usecs = end.tv_usec - start.tv_usec;
mtime = ((secs) * 1000 + usecs/1000.0) + 0.5;
printf("Elapsed time: %ld millisecs\n", mtime);
于 2013-03-01T04:55:39.467 に答える
-1

問題は、整数除算を行ってから浮動小数点数に変換していることです。それ以外の場合、結果は最も近い秒に切り捨てられます。(y-x)分割する前に float にキャストする必要があります。

z = (float)(y-x) / CLOCKS_PER_SEC;

プログラムがクロック粒度よりも速く実行される場合、何をしてもゼロになります (yxが同じになるため)。 しかし、少なくとも浮動小数点除算では、それ以外の場合は小数秒を取得できます。

[編集]実際、私の間違いです。何らかの理由でx、 とyは整数であると考えました ( の戻り値を格納するためにそれらを使用していたためclock)。したがって、この場合、おそらくクロック サイクルよりも速く実行されています。

高速な操作をベンチマークする場合は、次のいずれかまたは両方を実行する必要があります。

  • 操作を何度も繰り返す (千、百万...)
  • より高い解像度のタイマーを使用する
于 2013-03-01T04:53:54.623 に答える