Есть ли профилировщик для C (gcc) для отдельного профилирования строк кода?

Я работаю в среде Matlab, поэтому я привык к профилировщику, который профилирует каждую строку, а не только каждую функцию, например gprof или callgrind. Есть ли профилировщик для C с подобной функцией?

Спасибо!

снимок экрана профилировщика Matlab
(источник: jburkardt на people.sc.fsu.edu)


person Framester    schedule 16.07.2010    source источник
comment
Многие предложения по инструментам профилирования и т. Д. Уже на SO, см., Например, stackoverflow.com/questions/1168766/   -  person Paul R    schedule 16.07.2010


Ответы (5)


Shark, один из инструментов профилирования в Mac OS X, может это сделать (или даже профилировать по инструкции). Я понимаю, что ваш снимок экрана находится в Windows, так что это может быть бесполезно, но, возможно, вы можете запустить свой код на Mac. Вы можете попробовать Very Sleepy, но я никогда не использовал его, поэтому понятия не имею, насколько он хорош.

person Community    schedule 16.07.2010
comment
+1 для Shark - ближайший аналог в Linux - Zoom (www.rotateright.com), и я думаю, что лучшее, что вы можете сделать в Windows, - это Intel VTune (www.intel.com). - person Paul R; 16.07.2010
comment
Zoom выглядит как то, что я хочу, но, к сожалению, у меня нет бюджета на профилировщик за 200 долларов. - person Framester; 18.08.2010


Я считаю, что это делает callgrind. Я знаю, что это количество циклов в строке, но я не уверен насчет «времени».

person Tony Stark    schedule 16.07.2010

Проверьте эту ссылку и попробуйте этот метод.

Проблема с таким примером, как Мандельброт, заключается в том, что это не очень большая программа. В реальном программном обеспечении дерево вызовов становится намного глубже и более густым, поэтому вам нужно выяснить, в каждой строке или инструкции, какой процент времени он отвечает, и это всего лишь процент времени, в течение которого он находится в вызове. куча. Итак, вам нужно что-то, что делает выборку из стека вызовов и сообщает вам для каждой строки или инструкции, которая там появляется, на каком проценте выборок она находится. Не нужна высокая точность измерения - это один из мифов.

Для этого существуют инструменты: один - RotateRight / Zoom, а другой - LTProf. Лично я клянусь полностью ручным методом.

За последние пару дней у нас возникла проблема с производительностью в некотором коде здесь. Ручным методом нашел один способ сэкономить 40%. Затем я нашел способ сэкономить 40% сверх этого, в результате чего общая экономия составила 64%. Это всего лишь один пример. Вот пример экономии более 97%.

Добавлено: это имеет социальные последствия, которые могут ограничить потенциальное ускорение. Предположим, есть три проблемы. Проблема A (в вашем коде) занимает половину времени. Проблема B (в коде Джерри) занимает 1/4 времени, а проблема C (в вашем коде) занимает 1/8 времени. Когда вы сэмплируете, проблема A выскакивает на вас, и, поскольку это ваш код, вы исправляете ее, и теперь программа занимает половину исходного времени. Затем вы снова сэмплируете, и задача B (теперь 1/2) выскакивает на вас. Вы видите, что это в коде Джерри, поэтому вы должны объяснить это Джерри, стараясь не смущать его, и спросить, может ли он исправить это. Если он этого не сделает по какой-либо причине (например, это был его любимый код), то даже если вы исправите проблему C, время можно будет сократить только до 3/8 от исходного времени. Если он это исправит, вы можете исправить C и сократить время до 1/8 от исходного. Тогда может возникнуть другая проблема D (ваша): если вы ее исправите, время сократится до 1/16 от исходного времени, но если Джерри не исправит проблему B, вы не сможете добиться большего, чем 5/16. Вот почему социальное взаимодействие может быть абсолютно критическим в настройке производительности.

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

person Mike Dunlavey    schedule 16.07.2010

Наш инструмент SD C Profiler работает с исходным кодом GCC. Он обеспечивает профилирование базовых блоков, а не линий; это дает ту же точную информацию со значительно меньшими накладными расходами.

person Ira Baxter    schedule 24.07.2010
comment
Похоже, этот ответ помечается как спам. Было бы полезно, если бы те, кто это делают, заявили бы о своем явном возражении. Было бы полезно, если бы те из вас, кто считает этот ответ полезным, оставили конкретный комментарий о том, почему он актуален. - person Ira Baxter; 18.08.2010
comment
Ты занимаешься этим дерьмом как минимум 6 лет? - person xaxxon; 06.11.2016
comment
Что за хрень? Я создаю инструменты более 40 лет. Вы имеете в виду ответы на вопросы, требующие или требующие инструментов, с соответствующими инструментами? Почему-то это не кажется неправильным. Кажется, вы враждебно относитесь ко всему, что не является бесплатным. - person Ira Baxter; 06.11.2016
comment
@xaxxon: Правильно ли я понимаю: вы голосуете против, потому что ответ не касается вопроса OP и / или ответ неверен? - person Ira Baxter; 06.11.2016
comment
не требующий больших усилий саморекламный спам. - person xaxxon; 07.11.2016
comment
Я вижу, вы не возражали против фактического или утилитарного характера ответа, а только против нарушения вашего мировоззрения. У вас может быть свое мнение, но не может быть собственных фактов. Такой ответ принят в SO как полезный давно зашитой политикой. - person Ira Baxter; 07.11.2016