• 締切済み

プロセス実行速度の計測

C言語でプロセスの実行速度の計測方法・ソース等、教えてください。

みんなの回答

  • chie65535
  • ベストアンサー率43% (8536/19406)
回答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回以上は繰り返して実行して、その時間を計った方が良いでしょう。

kawa1047
質問者

補足

返信がおそくなりすみません。 質問なのですが、 >5の空ループが最適化されないよう「コンパイラオプションで、最適化なし」にしておく事。 最適化されるとどうなるのですか? また、空ループを普通にコンパイルすると、 デフォルトで最適化されるということですか? (コンパイラによるということですかね・・・?)

全文を見る
すると、全ての回答が全文表示されます。
  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.4

基本的に#3で言われている通りgettimeofday()でいいかと思いますが、一応こんな話もあります。 http://www2.nict.go.jp/w/w114/tsp/research/labo3/gettime.html まぁ極端に細かい単位で取らない限りはそう問題にはならないはずですが。

kawa1047
質問者

お礼

お礼が遅くなりすみません・・・ 参考になるページでした。 ありがとうございました!

全文を見る
すると、全ての回答が全文表示されます。
  • zwi
  • ベストアンサー率56% (730/1282)
回答No.3

組み込み系のLinuxで無ければ、確かgettimeofday()で十分な精度が得られるはずです。 http://www.linux.or.jp/JM/html/LDP_man-pages/man2/gettimeofday.2.html こんな感じですかね。計測対象は、かなり適当な処理が書いてあります。 #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でしか動作確認してません。

kawa1047
質問者

お礼

お礼が遅くなりすみません。。 ありがとうございました。 処理時間の計測ができました!本当助かります。

全文を見る
すると、全ての回答が全文表示されます。
  • zwi
  • ベストアンサー率56% (730/1282)
回答No.2

gccでWindowsですか。 そうすると仮想マシンとかじゃなくてcygwinかMinGWでしょうか? クロス・コンパイルで実行時はマイコンがターゲットじゃないですよね?出来上がったプログラムはWindows上で実行と考えて良いですか? そこだけハッキリさえてもらえますか。

kawa1047
質問者

補足

すみません。間違えていました。。。 OSはLinuxです。 コンパイラはgccです。 プログラムの実行もLinux上です。 たびたびすみませんが、 よろしくお願いいたします。

全文を見る
すると、全ての回答が全文表示されます。
  • zwi
  • ベストアンサー率56% (730/1282)
回答No.1

補足をお願いします。ハード、OS、C言語のコンパイラの名称。 それと ・プロセスの実行速度ってのはタイマとしての実行時間の計測ですか?それとも実際に利用したCPUタイム? ・それと時間の単位は秒?ミリ秒?マイクロ秒? などなど欲しい情報が分りませんので補足をお願いします。

kawa1047
質問者

補足

ハードは職場に行ってみないと分かりません。。。 OSはWindowsでコンパイラはgccを使用しています。 プロセスの実行速度はタイマとしての実行時間の計測です。 時間の単位はミリ秒でお願いします。 多々、知識不足のため、質問が漠然とし過ぎているかもしれませんが、 よろしくお願いします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • プログラムの実行時間の計測について

    プログラムの実行時間を計測したいのですが、 どのようにすればよいですか? 使っている言語はC++です。

  • RedHatから実行回線速度を計測

    こんにちは。よろしくお願いします。 Linux(RedHat)のシェルから、ブロードバンドの上り、下りの実行回線速度を計測するにはどうすればいいでしょうか? ブラウザがあれば速度計測サイトを利用して計測できるのですが...

  • .NETの実行速度について

    現在、VisualBasic6.0でソフト開発を行っていますが、 少しでも処理速度を速めたいと思っています。 そのため、C言語の勉強を始めようとおもっています。 ところが、かすかな記憶ではっきり覚えていないのですが、 MSの.NETで、C言語とVisualBasicとで 単純な同一の処理処理内容のものをそれぞれコンパイルすれば 出来上がった実行ファイルは同じコードになり 速度は同じとだったような記憶があるのですが これは正しいでしょうか? だとしたら、このままVisualBasicで開発を 続けたほうがいいのかなと感じています。

  • 2つのプロセスを実行するCGI

    1つのCGIで2つのプロセスを実行することを考えています。 1つは、数分かかるような処理を行い、もう1つはユーザにその処理が”実行中”であるといったメッセージを表示しようと思っています。 CGIはC&C++で作成しようと考えており、forkして子プロセスで、数分かかる処理を実行し、親プロセスでメッセージ画面表示といった流れを考えています。 で、質問ですが、この場合、メッセージ画面で子プロセスが実行している間、砂時計が表示され続けますが、これを消す方法がありますでしょうか? また、1つのCGIで、このように2つのプロセスを実行する場合に、何か良い方法はありますでしょうか?

    • 締切済み
    • CGI
  • コメント文の多さと実行速度の関係

    if文の括弧を利用する場合、?を用いる方法やtrueを返すときにa = (a==a)のようなC言語表記を用いると速度が変わると聞いたことがあります。 コメントが多いと実行速度に影響はありますでしょうか?

    • ベストアンサー
    • PHP
  • LANの実速度の計測

    unix端末間のLANの実速度(スループット)の計測をしようと思っています。特別なソフトを使わないことが条件なので、ftpコマンドで計測しますがどうしてもHDDの読み書きの影響が出てきてしまうと思います。この影響を無くして現実に近い実速度を計測するのにはどうゆう方法がいいでしょうか?  現状は、ftpコマンドで、get filename /dev/nullもしくはput filename /dev/nullで計測をしています。

  • 実行速度計測アプリケーション(DLL単位)などありますか?

    ご質問させて頂きます。 現在、手前のアプリケーションの実行速度が悪化しておりまして、 どのDLLの処理で時間がかかっているのかを計測しようと考えております。 これまで処理時間の計測を行ったことがなく、 Debuggerで出来るのか、そもそも無理な話なのかもわからない状況で 大変申し訳ありませんが、該当するような計測手段をご存知でしたら、ご教授願います。 計測したいことは以下の通りです。 [環境] Windows XP SP2 VC++ [計測内容] 単体アプリケーションに対する  ・メモリ使用量  ・各DLL単位の処理時間  ・可能であれば計測結果をグラフ表示 何卒、宜しくお願い致します。

  • [C#]実行中プロセスのパスを調べる方法について

    いつもお世話になっております。 現在実行中のプロセスの中から、特定のアプリのexeファイルのpathを表示させる方法が分からず苦戦しております。 言語はC#になります。 以下のコードでテキストボックスに、C#でコンパイルしたプログラムのpathは分かったのですが、私が表示させたいのは、コンパイルしたプログラムのpathではなく、現在実行中のプロセスの中のあるアプリのexeファイルのpathになります。 string appPath= System.Windows.Forms.Application.ExecutablePath; textBox1.Text = appPath; 良いお知恵がございましたらお力添えいただきたく、宜しくお願いいたします。

  • Linux C++ でマルチプロセスプログラミング

    Cent OS + Eclipse CDT で C++ プログラミングをはじめたばかりです。 マルチプロセスのアプリを作成したいのですが、C++ での子プロセス作成や その制御方法についてネットで探しても、C言語(の文法)でのやり方は見つかるのですが、 C++でのやりかたは見つかりませんでした。 (C言語を包含してるんだからC言語の文法でもいいじゃんとは言わないでください。。) C++でも fork して子プロセスを作成するということのようですが、 実際のサンプルソースなどが載っているサイトや、 Linux C++ で参考になる書籍があったら教えて欲しいと思います。 よろしくおねがいします。

  • 道の速度計測器について

    道の速度計測器について 本日、速度計測器がついている道路を走っていて、ちらっと速度計測器の方を見たところ、通り過ぎるかなり前?でピカっとなっていました。 よくその道路は走るので、いつもとスピードも変わらないと思いますし、そもそも私の車をビュンビュン抜かしていった車もかなりありましたし、光ったのが私の車に対してなのか、私の前にいた車に対してなのか分かりません。 知人に聞いた話では、速度計測器にひっかかるとパシャッとかなり眩しく光る…と聞いていたので、どうなのかなーと思っています。 もし捕まっていた場合は、どの程度の期間にハガキがきて、いくら罰金を支払わなければならないのでしょうか? よろしくお願いします。