gprof vs cachegrind profiles

Пытаясь оптимизировать код, я немного озадачен различиями в профилях, созданных kcachegrdind и gprof . В частности, если я использую gprof (компиляция с переключателем -pg и т. Д.), У меня будет следующее:

Flat profile:

Each sample counts as 0.01 seconds.
  %   cumulative   self              self     total           
 time   seconds   seconds    calls  ms/call  ms/call  name    
 89.62      3.71     3.71   204626     0.02     0.02  objR<true>::R_impl(std::vector<coords_t, std::allocator<coords_t> > const&, std::vector<unsigned long, std::allocator<unsigned long> > const&) const
  5.56      3.94     0.23 18018180     0.00     0.00  W2(coords_t const&, coords_t const&)
  3.87      4.10     0.16   200202     0.00     0.00  build_matrix(std::vector<coords_t, std::allocator<coords_t> > const&)
  0.24      4.11     0.01   400406     0.00     0.00  std::vector<double, std::allocator<double> >::vector(std::vector<double, std::allocator<double> > const&)
  0.24      4.12     0.01   100000     0.00     0.00  Wrat(std::vector<coords_t, std::allocator<coords_t> > const&, std::vector<coords_t, std::allocator<coords_t> > const&)
  0.24      4.13     0.01        9     1.11     1.11  std::vector<short, std::allocator<short> >* std::__uninitialized_copy_a<__gnu_cxx::__normal_iterator<std::vector<short, std::alloca

Что, кажется, предполагает, что мне не нужно искать никуда, кроме :: R_impl (. ..)

В то же время, если я скомпилирую без переключателя -pg и запустил вместо него valgrind --tool = callgrind ./a.out, у меня будет что-то довольно другое: вот скриншот вывода kcachegrind

enter image description here

Если я правильно интерпретирую, похоже, предполагается, что :: R_impl (...) занимает около 50% времени , в то время как другая половина тратится на линейную алгебру ( Wrat (...) , собственные значения и лежащие в основе вызовы лапака), которая была намного ниже в gprof ] профиль.

Я понимаю, что gprof и cachegrind используют разные методы, и я бы не стал беспокоиться, если бы их результаты несколько отличались. Но здесь это выглядит совсем иначе, и я не понимаю, как это интерпретировать. Есть идеи или предложения?

11
задан ev-br 11 June 2011 в 15:17
поделиться