MinGW gprof неточные результаты? - PullRequest
3 голосов
/ 01 ноября 2011

Я профилировал программу с помощью gprof для Linux (Ubuntu 11.04) и Windows (7, последняя версия MinGW), одну и ту же программу каждый раз для более или менее одного и того же набора данных и получал значительно разные результаты. (Существенно то, что они могут привести к различным выводам о том, какую часть кода необходимо оптимизировать.)

Вполне возможно, что результаты могут быть законно различны в двух системах, но я также должен учитывать возможность того, что один набор результатов является неточным и его следует игнорировать, и априори более вероятным будет MinGW, так как gprof меньше Тщательно протестировано на Windows, чем на Linux. Более весомый аргумент в пользу такого вывода заключается в том, что результаты в Windows выглядят отчетливо странно:

  %   cumulative   self              self     total           
 time   seconds   seconds    calls  us/call  us/call  name    
 27.43      1.13     1.13 68589813     0.02     0.02  addt
 21.48      2.02     0.89                             tok
 19.17      2.81     0.79                             hash
  9.95      3.21     0.41                             slot
  7.89      3.54     0.33                             nextx
  4.85      3.74     0.20                             next
  3.52      3.88     0.14 27809047     0.01     0.01  get
  0.85      3.92     0.04                             eol
  0.73      3.95     0.03                             __mingw_pformat
  0.73      3.98     0.03                             ch
  0.73      4.01     0.03                             tokx
  0.49      4.03     0.02                             slot
  0.49      4.05     0.02                             tok
  0.24      4.06     0.01   166896     0.06     0.06  mk2
  0.24      4.07     0.01     6693     1.49     1.49  initt
  0.24      4.08     0.01                             __pformat_putchars
  0.24      4.09     0.01                             hashs
  0.24      4.10     0.01                             pop
  0.24      4.11     0.01                             quoted
  0.12      4.12     0.01                             eat
  0.12      4.12     0.01                             expand
  0.00      4.12     0.00 145841014     0.00     0.00  initparse

Есть много пробелов, и затем сообщается, что initparse, который является функцией инициализации, вызываемой только один раз и почти ничего не вызывающей, вызывается сто сорок пять миллионов раз.

Должен ли я игнорировать результаты из Windows и просто использовать результаты из Linux? Или есть какая-то проблема с отчетом о количестве вызовов в Windows, которая не влияет на результаты в процентах? Или я неправильно читаю вывод или неправильно использую инструмент?

...