A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
他の回答の通り、時計はgettimeofday()で良いでしょう。
但し「プロセスの実行1回のみ」ではダメです。
正確に計測するには、以下のようにします。
1.時計を取得する。
2.forループ等で、下記3を10000回ループをする。
3.計測対象の処理。
4.時計を取得する。
5.forループ等で、何もしないループを10000回ループする。
6.時計を取得する。
7.上記1の時計と4の時計の時差を求める。
8.上記4の時計と6の時計の時差を求める。
9.上記7で求めた時差から、8で求めた時差を引く。すると「forループで10000回ループする際の処理時間」が計測値から除外される。
10.上記9で求めた計測値を10000で割ったのが、1回の実行時間。
(注)5の空ループが最適化されないよう「コンパイラオプションで、最適化なし」にしておく事。
5~9で色々な処理をしているのは「ループ文を処理する時間を計測値から除く為」です。
例えば、1の時計と4の時計の時差が12.1秒、4の時計と6の時計の時差が0.1秒なら、ループ文を処理する時間を除いた「計測対象のみの10000回の実行時間」は「12.1-0.1=12秒」です。これを10000で割れば「1回の実行時間」が出ます。
時計が1000分の1秒の精度で正確なのであれば、精度は100000分の1秒くらいにはなるかも。
ともかく「1回の実行時間では不正確」なので、1000回以上は繰り返して実行して、その時間を計った方が良いでしょう。
この回答への補足
返信がおそくなりすみません。
質問なのですが、
>5の空ループが最適化されないよう「コンパイラオプションで、最適化なし」にしておく事。
最適化されるとどうなるのですか?
また、空ループを普通にコンパイルすると、
デフォルトで最適化されるということですか?
(コンパイラによるということですかね・・・?)
No.4
- 回答日時:
基本的に#3で言われている通りgettimeofday()でいいかと思いますが、一応こんな話もあります。
http://www2.nict.go.jp/w/w114/tsp/research/labo3 …
まぁ極端に細かい単位で取らない限りはそう問題にはならないはずですが。
No.3
- 回答日時:
組み込み系のLinuxで無ければ、確かgettimeofday()で十分な精度が得られるはずです。
http://www.linux.or.jp/JM/html/LDP_man-pages/man …
こんな感じですかね。計測対象は、かなり適当な処理が書いてあります。
#include <sys/time.h>
#include <stdio.h>
double gettimeofday_msec()
{
struct timeval tv;
gettimeofday(&tv, NULL);
return (double)tv.tv_sec*1000.0 + (double)tv.tv_usec/1000.0;
}
int main()
{
double t1,t2;
/*開始時間取得*/
t1 = gettimeofday_msec();
/*計測対象*/
char str[16];
int i;
for (i = 0; i < 100000; i++) {
sprintf(str,"%d",i);
}
/*終了時間取得*/
t2 = gettimeofday_msec();
/*差分から処理時間を求める。*/
printf("処理時間:%.1fms\n", t2 - t1);
}
このコードは、cygwinでしか動作確認してません。
No.1
- 回答日時:
補足をお願いします。
ハード、OS、C言語のコンパイラの名称。それと
・プロセスの実行速度ってのはタイマとしての実行時間の計測ですか?それとも実際に利用したCPUタイム?
・それと時間の単位は秒?ミリ秒?マイクロ秒?
などなど欲しい情報が分りませんので補足をお願いします。
この回答への補足
ハードは職場に行ってみないと分かりません。。。
OSはWindowsでコンパイラはgccを使用しています。
プロセスの実行速度はタイマとしての実行時間の計測です。
時間の単位はミリ秒でお願いします。
多々、知識不足のため、質問が漠然とし過ぎているかもしれませんが、
よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- フリーソフト 通信量を計測するソフトを探してます 1 2022/08/18 14:39
- その他(プログラミング・Web制作) プログラミング 処理速度 1 2022/11/25 11:05
- その他(パソコン・スマホ・電化製品) 時速300㎞測定可能なアプリ 3 2022/09/26 16:02
- 物理学 鏡の中の時計について。 4 2023/01/18 02:32
- ネットワーク Macでインターネットの通信速度を連続的に記録するツール 1 2023/03/18 11:19
- その他(パソコン・スマホ・電化製品) 楽天モバイルの下りの速度が遅い。 5月28日 日曜日 11時 9 mbps 5月28日 日曜日 16 3 2023/05/28 16:45
- 物理学 ここで回答している相対論信者って全員、相対性理論を理解できてないですよね? 4 2023/03/08 12:40
- 医学 ED ratioについて 2 2023/02/11 11:09
- docomo(ドコモ) ahamo 1Mbps時のupload速度 3 2023/06/28 13:06
- 物理学 体重計が測定しているのは質量か重量のどちらなのでしょうか。 個人的に色々調べているのですが、ある情報 15 2023/02/26 04:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
do-while文が禁止される理由
-
ループを途中で抜けたいのですが。
-
__asm int 3でのブレイクポイン...
-
繰り返し文の利点について
-
C言語forループが完結した場合...
-
excel VBA if文について
-
プロセス実行速度の計測
-
strtokを使用したループ内でのs...
-
入力した文字列から母音だけを...
-
ライントレース 変数の使い方...
-
n重のfor文にするには?
-
break文でループを一気に抜ける...
-
Delphiで・・・
-
入力した数値を倍々するプログラム
-
「指定されたキャストは有効で...
-
Enterキーを押されたら次の処理...
-
C言語での引数の省略方法
-
信頼区間の1.96や1.65ってどこ...
-
2÷3などの余りについて
-
マイナスからプラスへ転じた時...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
break文でループを一気に抜ける...
-
ループを途中で抜けたいのですが。
-
入力した文字列から母音だけを...
-
do-while文が禁止される理由
-
入力した数値を倍々するプログラム
-
C言語forループが完結した場合...
-
if文の中にfor文なのか、for文...
-
プログラミングC言語についての...
-
エクセルVBAで Do While (1)って?
-
For文の終了値を関数にしても問...
-
エクセルでC言語のfor文と同じ...
-
Delphiで・・・
-
ループの特定入力終了
-
UWSCにてある一定の動作を無限...
-
C言語、自己参照構造体のプログ...
-
C言語 数字を削除する関数
-
Cプログラムが終了しない
-
Excel VBAで年度をまたぐ期間の...
-
プログラムで関数は使わない方...
-
VBScriptでSQLに接続し、CSV出...
おすすめ情報