こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

gccのプロファイラで時間が取得できない

gprofを使ってcygwinからプロファイルをしてみたのですが、時間に関する情報が取得できません。

関数別の呼び出し回数等は取得できているのですが、time等のパラメータがすべて0.0になっています。

具体的には以下のサイトを参考にしてやってみました
http://edu.inf.shizuoka.ac.jp/lecture/2007/X151/text/gprof.html
http://www.fireproject.jp/feature/gdb/omake/profile.html

何かご存知の方がいらっしゃいましたらよろしくお願いします。


以下は出力結果のサンプルです

$ gprof ./a.exe
Flat profile:

Each sample counts as 0.01 seconds.
no time accumulated

% cumulative self self total
time seconds seconds calls Ts/call Ts/call name
0.00 0.00 0.00 41000 0.00 0.00 foo
0.00 0.00 0.00 700 0.00 0.00 fuga
0.00 0.00 0.00 10 0.00 0.00 hoge



granularity: each sample hit covers 0 byte(s) no time propagated

index % time self children called name
0.00 0.00 6000/41000 main [41]
0.00 0.00 35000/41000 fuga [4]
[3] 0.0 0.00 0.00 41000 foo [3]
-----------------------------------------------
0.00 0.00 200/700 main [41]
0.00 0.00 500/700 hoge [5]
[4] 0.0 0.00 0.00 700 fuga [4]
0.00 0.00 35000/41000 foo [3]

投稿日時 - 2008-11-24 21:49:49

QNo.4504576

すぐに回答ほしいです

質問者が選んだベストアンサー

gprof を2.18.50にバージョンアップしてみたところ、
同様に実行時間が取得出来ない現象が確認出来ました。

http://ftp.jaist.ac.jp/pub/cygwin/release/binutils/binutils-20060817-1.tar.bz2
より「GNU gprof 2.17.50」をダウンロードできるみたいなので、
こちらも試してみてください。

拙者の予想だと、gmon.outの書式に使用変更があり、gprofは対応済みだったのに、
gccがまだ古い仕様で動いていたとか言う落ちじゃないだろうか・・・

投稿日時 - 2008-11-25 08:52:10

お礼

GNU gprof 2.17.50をダウンロードしてみましたが環境の違いか、残念ながらgcc自体ができなくなって試せませんでした。

>gprof を2.18.50にバージョンアップしてみたところ、
>同様に実行時間が取得出来ない現象が確認出来ました。
そうですか、gprofの利用は無理そうなので他の手段を探してみたいと思います。

色々と試していただきありがとうございました。
とても勉強になりました。

投稿日時 - 2008-11-28 00:20:09

ANo.4

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.3

当方の環境でも、gprofを試してみました。

実行結果
----------------------------------------------------------------------
Flat profile:

Each sample counts as 0.01 seconds.
% cumulative self self total
time seconds seconds calls s/call s/call name
100.00 84.46 84.46 1000 0.08 0.08 hogehoge
0.00 84.46 0.00 1 0.00 84.46 hogehoge_test
----------------------------------------------------------------------
と、実行時間は問題なく、取得できましたよ。

プログラムを変更して、ビルドしなおした時は、
「gmon.out」を再作成する必要があるみたいです。
gmon.outの再作成はしていますか?

確認環境:
Microsoft Windows 2000 Pro
cygwin+gcc
gcc (GCC) 3.4.4 (cygming special, gdc 0.12, using dmd 0.125)
GNU gprof 2.17.50

確認したプログラム
----------------------------------------------------------------------
#include <stdio.h>

void hogehoge();
void hogehoge_test();

int main(int argc, char *argv[])
{
  hogehoge_test();
  
  return 0;
}

void hogehoge()
{
  int i = 0;
  int j = 0;
  int isSosuu = 0;
  
  for (i = 1; i < 10000; i++)
  {
    isSosuu = 0;
    if (i == 1 || i == 2) {
      isSosuu = 1;
    } else if (i % 2){
      isSosuu = 1;
      for (j = 3; j <i; j += 2)
      {
        if (!(i % j))
        {
          isSosuu = 0;
          break;
        }
      }
    }
    if (isSosuu)
    {
      printf("%d ", i);
    }
  }
}

void hogehoge_test()
{
  int i = 0;
  
  for (i = 0; i < 1000; i++)
  {
    hogehoge();
  }
}
----------------------------------------------------------------------

投稿日時 - 2008-11-25 00:39:08

お礼

試していただきありがとうございます。

>gmon.outの再作成はしていますか?
毎回作り直しています。いったん消してやってみましたが同様に時間が取得できませんでした。

実際に貼って頂いたコードで実行してみましたが、うまくいきませんでした。


実行手順としては以下の流れで行っています。
1. gcc -pg test.c
2. ./a.exe
3. gprof ./a.exe gmon.out

以下が結果です。
----------------------------------------------------------------------
確認環境:
Microsoft Windows Vista Home Basic
cygwin+gcc
gcc (GCC) 3.4.4 (cygming special, gdc 0.12, using dmd 0.125)
GNU gprof 2.18.50


実行結果
----------------------------------------------------------------------
Flat profile:

Each sample counts as 0.01 seconds.
no time accumulated

% cumulative self self total
time seconds seconds calls Ts/call Ts/call name
0.00 0.00 0.00 1000 0.00 0.00 hogehoge
0.00 0.00 0.00 1 0.00 0.00 hogehoge_test
----------------------------------------------------------------------

投稿日時 - 2008-11-25 02:23:21

ANo.2

情報が少ないので、確かな事は言えませんが、

●コンパイルオプションは何を指定していますか?

●実行時間は目測で何秒位でしょう?
gprofは実行時間の大きい関数を最適化するために役に立つかもしれませんが、
実行時間が短い関数だと、timeは計測出来ないかもしれません。

投稿日時 - 2008-11-24 22:16:46

補足

オプションは-pgです。

実行時間は、上で出力結果のサンプルで示したものだと目測で8秒前後です。
1分前後のプログラムでも試してみましたが、同様にtimeが0.0でした。

投稿日時 - 2008-11-25 00:02:54

ANo.1

あなたが提示した一つ目の参考サイトに
| - Cygwin 環境でも gprof は利用できるが、プロファイル結果に一部不具合がある。
| -- 関数呼び出し回数は正しくカウントできるが、経過時間の値が正しくない。
| -- Linux 環境ではミリ秒単位での測定できるが、Cygwin では秒単位での測定しかできないため、誤差が大きい。
って書いてあるから、
cygwin上のgprofは時間を計るには使い物にならないんじゃない?

投稿日時 - 2008-11-24 22:09:05

あなたにオススメの質問