Есть ли какой-либо способ программно получить общее время выполнения программы C, а также количество времени, затраченного на определенную функцию? Мне нужно сделать это в коде, так как я хочу использовать эти два значения в качестве аргументов для другой функции. Поскольку я нахожусь в Linux, смогу ли я использовать gprof или perf для этого?Программно Получение общего времени и времени работы в Linux
ответ
Возьмите системное время при запуске программы. Затем, когда вы хотите, вы можете получить текущее время и вычесть время начала. Это говорит о том, как долго вы работаете в режиме настенных часов.
Имейте глобальное логическое значение Q, которое задано True, когда введена ваша функция, и False, когда он выходит, поэтому он является только True, когда программа включена в функцию (включительно).
Настройка прерывания таймера для отключения каждого N мс и двух глобальных счетчиков: A и B. (N не должно быть маленьким.) Когда таймер прерывает, пусть он увеличивает B независимо, но только увеличивает A, если Q истинно.
Таким образом, вы знаете, сколько времени прошло, а A/B - это часть того времени, когда ваша функция находилась в стеке.
BTW: Если функция рекурсивна, пусть Q - целочисленный «счетчик глубины». В противном случае никаких изменений.
В качестве альтернативы, не могу ли я просто запускать новый таймер внутри функции каждый раз, когда она вызывается, а когда функция возвращается, добавьте это прошедшее время в счетчик (например, B в вашем примере)? –
@John: Это сработает, но вызов обычной процедуры может быть дорогим по сравнению с тем, что происходит в вашей функции. Преимущество метода прерывания заключается в том, что частота дискретизации может быть настолько низкой, насколько вы хотите. Он не должен быть высокой частотой. –
Да, вы можете использовать gprof
, но для этого требуется перекомпилировать двоичный файл, который вы хотите измерить, чтобы вставить необходимый код мониторинга. По умолчанию программы не тратят время на запись этих данных, поэтому вы должны добавить их. С gcc это делается с использованием опции -pg
.
Как вы получите программные данные профилирования из gprof? Я не вижу пути. –
-pg вводит код для подсчета вызовов функций и отслеживания вызывающего абонента; он не вставляет контрольный код; мониторинг осуществляется ОС, которая периодически отображает IP-адрес. –
- 1. Получение времени работы программы
- 2. Получение согласованности времени в Linux
- 3. Расчет общего времени процессора
- 4. Получение времени безотказной работы Windows
- 5. Получение времени работы процессора AVAudioEngine
- 6. Получение времени работы пользователя в скрипте bash
- 7. Получение времени выполнения отложенной работы в рельсах?
- 8. Поиск общего времени
- 9. Получение времени выполнения пользовательского процесса в Linux
- 10. Получение времени в формате времени
- 11. Получение ошибки времени выполнения работы с векторами
- 12. Уменьшение общего времени вычислений
- 13. Linux эпохи времени
- 14. Расчет общего времени передачи пакета
- 15. Преобразование общего времени в секундах
- 16. Сравнение экспериментального времени работы алгоритма с теоретическими функциями времени работы
- 17. Получение времени от метки времени в улье
- 18. Получение местного времени
- 19. Оценка времени работы вспышки
- 20. Jenkinz Настройка времени работы
- 21. GWT Затраты времени работы
- 22. Определение времени работы алгоритма
- 23. setРезультаты работы НАИБОЛЬШЕГО времени
- 24. Оптимизация времени работы GC
- 25. Оптимизация времени работы алгоритма
- 26. корректировка времени работы crontab
- 27. mysql всего времени работы
- 28. Понимание функции времени работы
- 29. Получение даты и времени с даты выбора времени в Blackberry
- 30. Получение времени в секундах
Вы провели какое-либо исследование? В частности, есть функции 'times' и' clock'. –
Также см. Http://www.pixelbeat.org/programming/profiling/ –