Время работы микросекунды времени или лучшая точность

Я хочу знать количество времени, затраченное на выполнение программы под 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() вам в вашем требовании. Я использовал его и нашел полезным, поскольку он дает зернистость наносекундному уровню. Более подробно здесь.