Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> gprof не выдает ни время, ни %, а тока колич вызов 
V
    Опции темы
victor79
Дата 1.8.2009, 06:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


программист
*


Профиль
Группа: Участник
Сообщений: 211
Регистрация: 15.5.2008

Репутация: нет
Всего: нет



gprof не выдает ни время, ни %, а тока колич вызовов, в чем причина?
у меня mingw 3.4.5, gprof 2.18.50.20080109, все это работает под виндовс.
берем простую программу:
Код

#include <stdio.h>

void abc()
{
   int i = 0;
   for (i = 0; i < 20; i++) printf("%i", i);
   int b = 1;
   for (i = 0; i < 5; i++, b*=2) printf(" %i %i", i, b);
   printf("\n");
}

void ddd()
{
   int i = 0;
   for (i = 0; i < 200000; i++) printf("%i", i);
   int b = 1;
   for (i = 0; i < 5; i++, b*=2) printf("%i %i", i, b);
   for (i = 0; i < 20; i++) printf("%i", i);
   b = 1;
   for (i = 0; i < 5; i++, b*=2) printf("%i %i", i, b);
   printf("\n");
}

int main()
{
    abc();
    abc();
    ddd();
    return 0;
}

компилю с опциями gcc.exe -o 1.exe 1.cpp -lstdc++ -g -pg
выполняю 1.exe
профилирую gprof -b 1.exe gmon.out >a

в результате получаю:
Код

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        2     0.00     0.00  abc()
  0.00      0.00     0.00        1     0.00     0.00  ddd()
 
            Call graph


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

index % time    self  children    called     name
                0.00    0.00       2/2           _main [50]
[3]      0.0    0.00    0.00       2         abc() [3]
-----------------------------------------------
                0.00    0.00       1/1           _main [50]
[4]      0.0    0.00    0.00       1         ddd() [4]
-----------------------------------------------
 
Index by function name

   [3] abc()                   [4] ddd()


но здесь мне кажется в колонках %time и cumulative seconds должны быть какие-то цифирки...

PM MAIL WWW   Вверх
Леопольд
Дата 1.8.2009, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 943
Регистрация: 17.6.2009

Репутация: 10
Всего: 13



Цитата(victor79 @ 1.8.2009,  06:15)
gprof не выдает ни время, ни %, а тока колич вызовов, в чем причина?

Cтранно, что он не видит вызвов printf. Как его заставить?

Это сообщение отредактировал(а) Леопольд - 1.8.2009, 10:51


--------------------
вопросов больше чем ответов
PM MAIL   Вверх
SABROG
Дата 1.8.2009, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 4
Всего: 91



http://www.ibm.com/developerworks/ru/libra...prof/index.html

Цитата

Проницательные читатели заметят, что многие вызовы функций (например printf) не включены в результат. Это происходит потому, что они находятся в библиотеке времени исполнения C (libc.so), которая (в данном случае) не была откомпилирована с параметром -pg и, следовательно, информация профилирования не собирается ни для какой функции из этой библиотеки. Я вернусь к этой теме позже.


Миллисекунды вещь капризная:

Код

#include <stdio.h>
void abc()
{
   int i = 0;
   for (i = 0; i < 200000; i++) /*printf("%i", i)*/;
   int b = 1;
   for (i = 0; i < 500000; i++, b*=2) /*printf(" %i %i", i, b)*/;
   //printf("\n");
}
void ddd()
{
   int i = 0;
   for (i = 0; i < 200000; i++) /*printf("%i", i)*/;
   int b = 1;
   for (i = 0; i < 500000; i++, b*=2) /*printf("%i %i", i, b)*/;
   for (i = 0; i < 200000; i++) /*printf("%i", i)*/;
   b = 1;
   for (i = 0; i < 500000; i++, b*=2) /*printf("%i %i", i, b)*/;
   //printf("\n");
}
int main()
{
    abc();
    abc();
    ddd();
    return 0;
}




Код

Flat profile:

Each sample counts as 0.01 seconds.
  %   cumulative   self              self     total           
 time   seconds   seconds    calls  ms/call  ms/call  name    
100.00      0.01     0.01        2     5.00     5.00  abc()
  0.00      0.01     0.00        1     0.00     0.00  ddd()
 
            Call graph


granularity: each sample hit covers 4 byte(s) for 100.00% of 0.01 seconds

index % time    self  children    called     name
                0.01    0.00       2/2           main [2]
[1]    100.0    0.01    0.00       2         abc() [1]
-----------------------------------------------
                                                 <spontaneous>
[2]    100.0    0.00    0.01                 main [2]
                0.01    0.00       2/2           abc() [1]
                0.00    0.00       1/1           ddd() [6]
-----------------------------------------------
                0.00    0.00       1/1           main [2]
[6]      0.0    0.00    0.00       1         ddd() [6]
-----------------------------------------------
 
Index by function name

   [1] abc()                   [6] ddd()



Это сообщение отредактировал(а) SABROG - 1.8.2009, 17:20


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
victor79
Дата 1.8.2009, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


программист
*


Профиль
Группа: Участник
Сообщений: 211
Регистрация: 15.5.2008

Репутация: нет
Всего: нет



ок, а вот есть у меня большая программка. И мне любопытно было бы посмотреть что почем выполняется. И вот что я получаю:
Код

  %   cumulative   self              self     total           
 time   seconds   seconds    calls  Ts/call  Ts/call  name    
  0.00      0.00     0.00 46551536     0.00     0.00  t_value::incref(int)
  0.00      0.00     0.00 16720167     0.00     0.00  t_value::~t_value()
  0.00      0.00     0.00 12712586     0.00     0.00  t_value::operator<<(t_value const&)
  0.00      0.00     0.00  8210890     0.00     0.00  vect_incref(void*, int)
  0.00      0.00     0.00  7809216     0.00     0.00  t_value::t_value(ktp)
  0.00      0.00     0.00  5706228     0.00     0.00  t_value::t_value(t_value const&)
  0.00      0.00     0.00  4406114     0.00     0.00  vect_decref(void*)
  0.00      0.00     0.00  3501828     0.00     0.00  t_blist::get(int) const
  0.00      0.00     0.00  2500598     0.00     0.00  t_counter::incref(int)
  0.00      0.00     0.00  1903514     0.00     0.00  t_value::list(int) const
  0.00      0.00     0.00  1803592     0.00     0.00  t_value::fromPointer(ktp, void const*)
  0.00      0.00     0.00  1803346     0.00     0.00  vect_list(void*, int)
  0.00      0.00     0.00  1800614     0.00     0.00  t_list<int>::operator[](int) const
  0.00      0.00     0.00  1503204     0.00     0.00  t_ref_val::t_ref_val(ktp, void*, void*)
  0.00      0.00     0.00  1500497     0.00     0.00  compile_atom(t_ip&)
  0.00      0.00     0.00  1402909     0.00     0.00  t_ref_val::setval(t_value const&) const
  0.00      0.00     0.00  1402909     0.00     0.00  t_ref_val::operator<<(t_value const&) const
  0.00      0.00     0.00  1302805     0.00     0.00  calc_sz(int)
  0.00      0.00     0.00  1302805     0.00     0.00  mymalloc(int)
  0.00      0.00     0.00  1302535     0.00     0.00  myfree(void*)
  0.00      0.00     0.00  1302531     0.00     0.00  inc_vect(int**&, int, int&)
  0.00      0.00     0.00  1202033     0.00     0.00  t_value::getcrc() const
  0.00      0.00     0.00  1201804     0.00     0.00  t_dict::cell(t_value const&, int)
  0.00      0.00     0.00  1201804     0.00     0.00  t_dict::search(unsigned long, t_dcrc**)
  0.00      0.00     0.00  1201162     0.00     0.00  t_value::t_value(unsigned int)
  0.00      0.00     0.00  1200883     0.00     0.00  t_list<unsigned long>::operator[](int) const
  0.00      0.00     0.00  1003065     0.00     0.00  vect_rlist(void*, int)
  0.00      0.00     0.00  1003065     0.00     0.00  t_value::rlist(int) const
  0.00      0.00     0.00  1002819     0.00     0.00  vect_setToRef(void*, void*, t_value const&)
  0.00      0.00     0.00  1002819     0.00     0.00  t_value::toPointer(ktp, void*) const
  0.00      0.00     0.00  1002023     0.00     0.00  t_value::count() const
  0.00      0.00     0.00   900896     0.00     0.00  t_value::equal(t_value const&) const
  0.00      0.00     0.00   900196     0.00     0.00  prepare_name(int)
  0.00      0.00     0.00   800243     0.00     0.00  operator_continue(t_ip&, t_value const&)
  0.00      0.00     0.00   700375     0.00     0.00  t_value::clear()
  0.00      0.00     0.00   700315     0.00     0.00  t_ditem::setNewVal(t_value const&)
  0.00      0.00     0.00   700254     0.00     0.00  t_value::t_value(oper, int)
  0.00      0.00     0.00   601482     0.00     0.00  vect_create(int, int, void const*)
  0.00      0.00     0.00   601478     0.00     0.00  vect_cr2(ktp, int, void const*)
  0.00      0.00     0.00   600411     0.00     0.00  t_value::t_value(ktp, int)
  0.00      0.00     0.00   501012     0.00     0.00  t_dict::cellval(t_value const&, int)
...
...

т.е. я вижу только по количеству выполнений, но не время. Можно ли как-нибудь все же увидеть время?
PM MAIL WWW   Вверх
SABROG
Дата 1.8.2009, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 4
Всего: 91



Нагрузи её побольше, чтобы несколько секунд выполнялась и всё увидишь.


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
victor79
Дата 2.8.2009, 23:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


программист
*


Профиль
Группа: Участник
Сообщений: 211
Регистрация: 15.5.2008

Репутация: нет
Всего: нет



и все же он у меня не считает время, я переделал первый пример:
Код

void abc()
{
   int i = 0;
   for (i = 0; i < 20; i++) ;
   int b = 1;
   for (i = 0; i < 5; i++, b*=2) ;
}

int ddd()
{
   int i = 0;
   int b = 0;
   for (i = 0; i < 2000000000; i++) b = b + 1; // здесь я увеличил количество циклов
   
   return b;
}

int main()
{
    abc();
    abc();
    ddd();
    return 0;
}

время выполнения данной программы около 5 секунд, никаких библиотечных функций не вызывается, команда компиляции:
gcc -o 1.exe 1.cpp -pg
команда профилирования:
gprof -b 1.exe gmon.out >a
результат:
Код

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        2     0.00     0.00  abc()
  0.00      0.00     0.00        1     0.00     0.00  ddd()
 
            Call graph

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

index % time    self  children    called     name
                0.00    0.00       2/2           _main [50]
[3]      0.0    0.00    0.00       2         abc() [3]
-----------------------------------------------
                0.00    0.00       1/1           _main [50]
[4]      0.0    0.00    0.00       1         ddd() [4]
-----------------------------------------------
 
Index by function name

   [3] abc()                   [4] ddd()

тут либо версии компилятора/профилятора глючат, либо не рассчитаны на быстрые компьютеры (у меня i7, раньше проверял на Core2Quad2.66, вроде также было)
to SABROG можете сообщить Ваши версии gcc и gprof?
PM MAIL WWW   Вверх
bsa
Дата 3.8.2009, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



в одну из функций воткни Sleep(100).
PM   Вверх
SABROG
Дата 3.8.2009, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 4
Всего: 91



Цитата(victor79 @  2.8.2009,  23:40 Найти цитируемый пост)
to SABROG можете сообщить Ваши версии gcc и 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      6.70     6.70        1     6.70     6.70  ddd()
  0.00      6.70     0.00        2     0.00     0.00  abc()
 
            Call graph


granularity: each sample hit covers 4 byte(s) for 0.15% of 6.70 seconds

index % time    self  children    called     name
                6.70    0.00       1/1           main [2]
[1]    100.0    6.70    0.00       1         ddd() [1]
-----------------------------------------------
                                                 <spontaneous>
[2]    100.0    0.00    6.70                 main [2]
                6.70    0.00       1/1           ddd() [1]
                0.00    0.00       2/2           abc() [6]
-----------------------------------------------
                0.00    0.00       2/2           main [2]
[6]      0.0    0.00    0.00       2         abc() [6]
-----------------------------------------------
 
Index by function name

   [6] abc()                   [1] ddd()



GNU gprof (GNU Binutils) 2.19.1
gcc version 4.4.0 (GCC)

Цитата(victor79 @  2.8.2009,  23:40 Найти цитируемый пост)
gcc -o 1.exe 1.cpp -pg

Возможно это происходит потому, что ты забыл ключ -g?

Цитата(bsa @  3.8.2009,  16:28 Найти цитируемый пост)
в одну из функций воткни Sleep(100).

Это не будет работать, gprof считает реальное время выполнения.

Это сообщение отредактировал(а) SABROG - 3.8.2009, 19:54


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
victor79
Дата 4.8.2009, 00:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


программист
*


Профиль
Группа: Участник
Сообщений: 211
Регистрация: 15.5.2008

Репутация: нет
Всего: нет



скачал последние версии и проблема решилась. Спасибо.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.2686 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.