Ищете низкоэффективный C++ профилировщик
Я ищу слабое влияние, OS-независимый профилировщик для кода C++.
Когда я говорю о слабом воздействии, я имею в виду нечто менее навязчивое, чем вальгринд. Я планирую использовать его в среде встраивания на основе MIPS (отсюда и независимость от os) и попробовал портированную версию valgrind, и она полностью изменила характеристики производительности (слишком много принципа Гейзенберга в работе), поэтому я не могу пойти по этому пути. Мы знаем, что скорость шины памяти является узким местом, что, скорее всего, объясняет, почему valgrind был настолько навязчивым.
Я создал доморощенный тип профилировщика на основе контрольных точек, который позволяет мне измерять определенные части кода. В основном я должен изменить код (и перекомпилировать), чтобы установить контрольные точки в стратегических местах в коде. Затем, при выполнении, он сохраняет количество раз, когда каждая контрольная точка была достигнута, и время, прошедшее с момента последней контрольной точки. Затем, запустив его, я могу сбросить контрольные точки и рассчитать для каждого: num-hit, max-time, min-time, avg-time и т. Д.
Этот профилировщик (я назвал его LowImpactProfiler) работает нормально, но мне интересно, есть ли что-то лучшее там.
Я рассматривал oProfile, который является профилировщиком выборки, но поскольку я не использую Linux, я думаю, что это будет действительно сложно реализовать.
2 ответа
Я использовал Shiny для профилирования на очень ограниченных встроенных устройствах с большим успехом. Из вашего описания, он использует аналогичный подход к вашему LowImpactProfiler.
Если вы используете Windows, вы можете попробовать мой профилировщик, описанный здесь http://ravenspoint.wordpress.com/2010/06/16/timing/
Похоже, это может быть проще в использовании, чем у вас, но это не зависит от ОС. Он использует вызовы QueryPerformanceCounter(), который является Windows API. Это открытый исходный код, поэтому может быть целесообразно перенести его на вашу ОС, используя любой высокопроизводительный таймер, доступный там.