処理時間の測定について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
れこしぁ

処理時間の測定について

#1

投稿記事 by れこしぁ » 15年前

実行してからループで動作しているプログラムで、ある処理が開始されてから終了するまでの時間を測定したいのですが、どうすればうまく測定できるでしょうか?

たかぎ

Re:処理時間の測定について

#2

投稿記事 by たかぎ » 15年前

おおまかな計測でよいのであれば、ストップウォッチを使ってください。
高い精度が必要なら、最初と最後に出力ポートに書き込んで、オシロスコープ等を使って計測してください。

Dixq (管理人)

Re:処理時間の測定について

#3

投稿記事 by Dixq (管理人) » 15年前

メジャーな所で言うと、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:処理時間の測定について

#4

投稿記事 by れこしぁ » 15年前

長時間のおおまかな測定にはストップウォッチ、短時間の詳細な測定にはclock関数を使おうと思います。
ありがとうございました。

non

Re:処理時間の測定について

#5

投稿記事 by non » 15年前

たかぎさんがストップウォッチっていうのは、れこしゃさんが、環境などを何も書いていないからです。
環境によっては、長時間なら長時間なりに、ストップウオッチを使わなくてもおおまかな測定はできます。
例え、OSのないPICマイコンでもね。

たかぎ

Re:処理時間の測定について

#6

投稿記事 by たかぎ » 15年前

> 短時間の詳細な測定にはclock関数を使おうと思います。

clock関数はCPU使用時間を返すものなので、実時間が欲しいときに使うのは不適切です。
また、clock関数が使えない、または常に(clock_t)-1を返す環境もあります。

Naohiro19

Re:処理時間の測定について

#7

投稿記事 by Naohiro19 » 15年前

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;
}

閉鎖

“C言語何でも質問掲示板” へ戻る