профилировщик микросекунды для кода C

Какое-либо тело знает о профилировщике кода C как gprof, который дает времена вызова функции в микросекундах вместо миллисекунд?

5
задан Tim Cooper 24 May 2010 в 12:34
поделиться

3 ответа

Позвольте мне просто предложить, как бы я с этим справился, если у вас есть исходный код.

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

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

Эта доля X - наиболее ценная информация, которую вы можете получить, потому что это общее количество времени, которое вы потенциально можете сэкономить, оптимизируя эту функцию или строку кода.

Профилировщик Zoom - хороший инструмент для получения этой информации.

Я бы обернул длительный цикл вокруг кода верхнего уровня, чтобы он выполнялся многократно, достаточно долго, чтобы занять по крайней мере несколько секунд. Затем я вручную пробовал стек, прерывая или приостанавливая его наугад. На самом деле требуется очень мало образцов, например 10 или 20, чтобы получить действительно четкое представление о наиболее трудоемких функциях и / или строках кода.

Вот пример.

P.S.Если вас беспокоит точность статистических данных, позвольте мне получить количественные данные. Если функция или строка кода находится в стеке ровно 50% времени, и вы берете 10 выборок, то количество выборок, которые показывают это, будет 5 +/- 1,6 с погрешностью 16%. Если фактическое время меньше или больше, предел погрешности уменьшается. Вы также можете уменьшить погрешность, взяв больше образцов. Чтобы получить 1,6%, возьмите 1000 проб. На самом деле, как только вы обнаружите проблему, вам решать, нужна ли вам меньшая погрешность.

3
ответ дан 14 December 2019 в 01:02
поделиться

Взгляните на Linux perf . Однако вам понадобится довольно свежее ядро.

3
ответ дан 14 December 2019 в 01:02
поделиться

oprofile дает вам время в разрешении часов, то есть наносекунды, он создает выходные файлы, совместимые с gprof, что очень удобно в использовании.

http://oprofile.sourceforge.net/news/

1
ответ дан 14 December 2019 в 01:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: