Подходит ли gprof для анализа долго работающих программ? Почему или почему нет?

Я знаю, что в gprof есть частота подсчета выборок, прежде чем он напечатает плоский профиль. Основываясь на частоте подсчета выборки, я считаю, что программа будет работать дольше, больше будет выборка, собранная для профилирования, и, следовательно, будут лучше данные. Но я не совсем уверен, так ли это и подходят ли долго работающие программы для профилирования на gprof.

Любые материалы будут действительно полезны.


person ggulgulia    schedule 11.11.2017    source источник
comment
Когда вы говорите об анализе, gprof говорит вам, что вы мало что можете сделать для ускорения программы, что, вероятно, будет хорошей новостью для программиста - ложно хорошая новость . Вот почему и как сделать это лучше.   -  person Mike Dunlavey    schedule 16.11.2017
comment
меня не интересует ускорение программы, только достоверность результатов gprof для программ, которые работают долго   -  person ggulgulia    schedule 18.11.2017


Ответы (2)


правда, у gprof есть преимущества (доступность на любой платформе), но недостатки делают его непригодным для более сложных программ. 1) инструментарий добавляет накладные расходы на вызов функции 2) не может профилировать код в разделяемых библиотеках 3) профилирует только основной поток 4) не предоставляет информацию о промахах кеша 5) не дает флопов/с 6) не анализирует циклы и т. д.

person john    schedule 15.11.2017

Мой ответ, который кажется мне наиболее логичным, таков:

Если программа работает долго и нас интересует только профилирование, то grpof кажется подходящим инструментом, потому что gprof опирается на частоту сбора семплов, которая по умолчанию составляет 100 Гц. Если время работы gprof очень мало и если в течение этого небольшого времени он вызывает много функций, то весьма вероятно, что размер выборки для профилирования очень мал, и, следовательно, выборки профилируемых функций ненадежны. В противном случае накладные расходы на инструментирование для профилирования могут увеличить время выполнения программы, а общее время выполнения может не отражать фактическое время выполнения приложения, которое можно просто измерить путем вызова подходящих функций времени, предоставляемых ядром операционной системы.

person ggulgulia    schedule 28.12.2017