ページ 1 / 1
処理時間の測定について
Posted: 2009年12月24日(木) 21:45
by れこしぁ
実行してからループで動作しているプログラムで、ある処理が開始されてから終了するまでの時間を測定したいのですが、どうすればうまく測定できるでしょうか?
Re:処理時間の測定について
Posted: 2009年12月24日(木) 21:52
by たかぎ
おおまかな計測でよいのであれば、ストップウォッチを使ってください。
高い精度が必要なら、最初と最後に出力ポートに書き込んで、オシロスコープ等を使って計測してください。
Re:処理時間の測定について
Posted: 2009年12月24日(木) 22:27
by Dixq (管理人)
メジャーな所で言うと、clock関数かgettimeofdayを使えばよさそうです。
時間を測定するサンプルを書いてみました。
#include <stdio.h>
#include <time.h>
int main(){
int t = clock();
getchar();
printf("%.3f秒\n",(double)(clock()-t)/CLOCKS_PER_SEC);
return 0;
}
エンターを入力すると、プログラムを開始してからの秒数が表示されます。
clockというのはプログラムが開始してからの経過時間なので、常に増え続けます。
測定したい開始時点で一度記憶し、その差分で時間を測定します。
gettimeofdayと両方使い方がこの辺に乗っていますので参考にどうぞ。
http://kzk9.net/column/time.html
clock関数の帰り値がマイクロ秒であると、確か(プログラムを開始してから)一時間ちょっと位しか測れないので、
もし長時間の測定の場合で環境がLinuxなどであれば注意が必要かもしれません。
Re:処理時間の測定について
Posted: 2009年12月25日(金) 01:38
by れこしぁ
長時間のおおまかな測定にはストップウォッチ、短時間の詳細な測定にはclock関数を使おうと思います。
ありがとうございました。
Re:処理時間の測定について
Posted: 2009年12月25日(金) 09:07
by non
たかぎさんがストップウォッチっていうのは、れこしゃさんが、環境などを何も書いていないからです。
環境によっては、長時間なら長時間なりに、ストップウオッチを使わなくてもおおまかな測定はできます。
例え、OSのないPICマイコンでもね。
Re:処理時間の測定について
Posted: 2009年12月25日(金) 09:43
by たかぎ
> 短時間の詳細な測定にはclock関数を使おうと思います。
clock関数はCPU使用時間を返すものなので、実時間が欲しいときに使うのは不適切です。
また、clock関数が使えない、または常に(clock_t)-1を返す環境もあります。
Re:処理時間の測定について
Posted: 2009年12月25日(金) 11:16
by Naohiro19
timeGetTime関数を使えばおおよその時間が出ます。
10万回カウントアップし続けた秒数です。
intel Pentium 4 HT/メモリ:512MBの環境では98秒と出ました
#include <stdio.h>
#include <windows.h> //DWORD型を使うため必要
#include <mmsystem.h> //timeGetTimeを使うため必須
#pragma comment(lib,"winmm.lib") //timeGetTimeを使うため必須
int main(void)
{
//timeGetTimeの精度を上げる(Windows98用)
timeBeginPeriod(1);
double cnt = 0;
DWORD now = timeGetTime();
for(int i = 0; i < 10000000; i++)
{
cnt++;
}
printf("浮動小数点10万回計算の秒数:%d秒\n", timeGetTime() - now );
timeEndPeriod(1);
return 0;
}