コードブロックの実行時間を決定しようとするコードがあります。C言語でのclock()関数の精度
#include <time.h>
#include <stdio.h>
int main()
{
clock_t start_t, end_t, total_t;
int i;
start_t = clock(); //clock start
printf("Starting of the program, start_t = %ld\n", start_t);
printf("Going to scan a big loop, start_t = %ld\n", start_t);
for(i=0; i< 10000000; i++) //trying to determine execution time of this block
{
}
end_t = clock(); //clock stopped
printf("End of the big loop, end_t = %ld\n", end_t);
total_t = (long int)(end_t - start_t);
printf("Total time taken by CPU: %lu\n", total_t );
return(0);
}
私のマシン上のコードスニペットの出力は
Starting of the program, start_t = 8965
Going to scan a big loop, start_t = 8965
End of the big loop, end_t = 27259
Total time taken by CPU: 18294
である私のCPUは21 MHzで動作し、これが実行さばかりだけのものだったと仮定したのであれば、各マシンサイクルは約になります47ナノ秒に等しいので(18294 * 47)= 859818ナノ秒。
これはコード内のforループの実行時間ですか?ここで間違った仮定をしていますか?
時間を秒単位で取得するには、数値を分割する必要があります。 'total_t'を' CLOCKS_PER_SEC'で置き換えてください。 'total_t'を浮動小数点値にキャストして動作させる必要があることに注意してください。 –
また、名前付けスキームの小さなニックピッキング: '_t'という接尾辞で終わるシンボルは、通常、(' typdef'で作成された)型別名に使用されます。たとえば 'size_t'や' time_t'や 'clock_t'などです。 –
@JoachimPileborg clock()関数のドキュメントを見直し、CLOCK_PER_SECは1/100th秒まで正確な時刻を返し、10マイクロ秒までの分解能を探しています。 CLOCKS_PER_SECはアーキテクチャによって変更されるため、異なるプラットフォームやアーキテクチャで動作するようにしたいので、違いを計算してクロックスピードに乗算する方が良い方法です。 – user2808264