Я хочу знать количество времени, затраченное на выполнение программы под Linux в микросекундах (или лучшей точности). В настоящее время я использую команду time
, но она дает мне максимальную точность в миллисекундах. Есть ли способ настроить команду time
, чтобы дать лучшую точность или есть какая-то другая команда для того же?
Время работы микросекунды времени или лучшая точность
Ответ 1
Ваш вопрос бессмысленен: вы не будете получать повторные измерения даже в течение миллисекунд, сообщает отчет.
Добавление большего количества цифр просто добавит шум. Вы также можете вывести дополнительные цифры из /dev/random
.
Ответ 2
Я согласен с Ответом на русский язык. Не имеет большого смысла хотеть микросекундную точность для таких мер. Таким образом, любая дополнительная цифра, которая у вас есть, бессмысленна (и по существу случайна).
Если у вас есть исходный код приложения для измерения, вы можете использовать clock или clock_gettime, но не надейтесь на лучшее, чем дюжину микросекунд точности. Существует также инструкция RDTSC.
Прочитайте линукс-часы.
И не забывайте, что время выполнения, с точки зрения приложения, не детерминировано и не воспроизводится (подумайте о переключателях контекста, пропущенных кешках, прерываниях и т.д.), происходящих в произвольное время).
Если вы хотите измерить производительность всей программы, запустите ее в течение как минимум нескольких секунд и измерьте время несколько (например, 8) раз, и возьмите среднее (возможно, сбросьте лучшее и худшее время).
Если вы хотите измерить время для определенных функций, узнайте, как профиль вашего приложения (gprof
, oprofile
и т.д. и т.д...)
См. Также этот вопрос
Не забывайте читать время (7)
Помните, что на текущем (ноутбук, рабочий стол, сервер) out-of-order pipelined superscalar процессоры со сложным Кэширование CPU и TLB и предсказатели отрасли время выполнения некоторой крошечной петли или последовательности машинной команды не воспроизводится (количество наносекунд будет варьироваться от одного прогона к другому). И ОС также добавляет случайность (scheduling, контекстные переключатели, прерывания, кеш страниц, copy-on-write, запрос-пейджинг...) поэтому не имеет смысла измерять выполнение какой-либо команды с более чем одной миллисекундой или, возможно, 100 мкс, если вам повезет с точностью. Вы должны несколько раз проверить свою команду.
Чтобы получить значительные меры, вы должны изменить тестируемое приложение на более чем несколько секунд (возможно, добавив некоторый цикл в main
или запустить с большим набором данных...) и повторите сравнительную команду a десятки раз. Это принимает среднее (или худшее, или самое лучшее, в зависимости от того, что вы после этого).
Если системы time (1) недостаточно, вы можете создать собственное средство измерения; см. также getrusage (2); Я скептически отношусь к тому, что вы принимаете более точные меры.
BTW на моем i3770K недавнем настольном компьютере GNU/Linux (4.2 kernel, Debian/Sid/x86-64), "system" -calls как время ( 2) или clock_gettime (2) работает примерно через 3 или 4 наносекунды (благодаря vdso (7), которые избегают бремени реального syscall...), чтобы вы могли используйте их внутри своей программы довольно часто.
Ответ 3
Использовать gettimeofday - дает точность в микросекунду
Ответ 4
Посмотрите, поможет ли current_kernel_time() вам в вашем требовании. Я использовал его и нашел полезным, поскольку он дает зернистость наносекундному уровню. Более подробно здесь.