Интерпретация вывода gprof с <spontaneous> - PullRequest
6 голосов
/ 30 сентября 2011

Я пытаюсь найти проблему с производительностью в моей программе и, таким образом, снабдил код профилированием.gprof создает плоский профиль, подобный этому:

Flat profile:

Each sample counts as 0.01 seconds.
  %   cumulative   self              self     total           
 time   seconds   seconds    calls  ms/call  ms/call  name    
 27.97      4.10     4.10                             std::_Deque_iterator<char, char&, char*>::_Deque_iterator(std::_Deque_iterator<char, char&, char*> const&)
  6.96      5.12     1.02                             std::_Deque_iterator<char, char&, char*>::difference_type std::operator-<char, char&, char*>(std::_Deque_iterator<char, char&, char*> const&, std::_Deque_iterator<char, char&, char*> const&)
  5.12      5.87     0.75                             std::__deque_buf_size(unsigned int)
  4.23      6.49     0.62                             std::_Deque_iterator<char, char&, char*>::operator+=(int)
  3.41      6.99     0.50                             std::deque<char, std::allocator<char> >::begin()
  1.91      7.27     0.28     7896     0.04     0.04  std::vector<MyClass, std::allocator<MyClass> >::_M_insert_aux(__gnu_cxx::__normal_iterator<MyClass*, std::vector<MyClass, MyClasst> > >, MyClassconst&)
  1.91      7.55     0.28                             std::deque<char, std::allocator<char> >::size() const
  1.91      7.83     0.28                             std::_Deque_iterator<char, char&, char*>::_S_buffer_size()

, за которым следуют многие строки с меньшим временем.

Первый вопрос: допустимо ли считать, что существует проблема сстанд :: Deque?Проблема в том, что я знаю, что мы используем std :: deque, но я не знаю об использовании с <char>.

Если это предположение верно, кажется, имеет смысл взглянуть на стек вызовов и посмотреть, где используется эта deque.Однако, все записи, касающиеся материала deque<char>, вызываются только <spontaneous>!

Только один пример:

index % time    self  children    called     name
                                                 <spontaneous>
[1]     28.0    4.10    0.00                 std::_Deque_iterator<char, char&, char*>::_Deque_iterator(std::_Deque_iterator<char, char&, char*> const&) [1]

Есть ли способ узнать больше об этом deque?

Спасибо за любые подсказки!

1 Ответ

3 голосов
/ 30 сентября 2011

Очевидно, что gprof использует спонтанное, когда не может обработать вызывающую функцию. Я бы попробовал перекомпилировать весь код с -pg (возможно, вы пропустили некоторые файлы?). Также убедитесь, что у вас включена оптимизация. Встраивание, как правило, приводит к тому, что эти маленькие функции исчезают в вызывающей функции, что, как правило, более полезно.

...