Я согласен с Ответ занятого русского .Не имеет большого смысла хотеть микросекундную точность для таких мер.Таким образом, любая дополнительная цифра, которую вы получите, не имеет смысла (и, по сути, случайна).
Если у вас есть исходный код приложения для измерения, вы можете использовать функции clock или clock_gettime , но не надейтесь на лучшее, чем дюжинамикросекунды точности.Существует также машинная инструкция RDTSC .
Прочитайте инструкцию linux clock .
И не забывайте, что время выполненияс точки зрения приложения, недетерминированный и невоспроизводимый (подумайте о переключениях контекста, пропусках кэша, прерываниях и т. д., происходящих в случайное время).
Если вы хотите измерить производительность всей программысделайте так, чтобы он работал не менее нескольких секунд, измерьте время несколько (например, 8) раз и возьмите среднее значение (возможно, отбрасывая наилучшее и наихудшее время).
Если вы хотите измерить время для определенных функцийузнайте, как профиль ваше приложение (gprof
, oprofile
и т. д. и т. д.). См. также этот вопрос
Не забудьте прочитать время (7)
Имейте в виду, что на текущем (ноутбук, настольный компьютер, сервер) вышло из строя конвейеризовано суперскалярно процессоров со сложными процессорных кешей и TLB и предсказатели ветвления , время выполнения какого-то крошечного цикла или последовательности машинных инструкций не воспроизводится (количество наносекунд будет варьироваться от одного прогона к следующему).И ОС также добавляет случайность ( планирование , переключение контекста , прерывания , кэш страницы , копирование при записи , request-paging ...), поэтому нет смысла измерять выполнение какой-либо команды длительностью более одной миллисекунды - или, возможно, 100 мкс, если вам повезет - с точностью.Вы должны тестировать свою команду несколько раз.
Чтобы получить значимые меры, вы должны настроить тестируемое приложение так, чтобы оно выполнялось более чем за несколько секунд (возможно, добавив какой-то цикл в main
или запустить с большим набором данных)....), и повторите тестовую команду дюжину раз.Это принимает среднее (или худшее, или лучшее, в зависимости от того, что вы после) из мер.
Если система time (1) не достаточно, вы можете сделать вашсобственный измерительный центр;см. также getrusage (2) ;Я скептически отношусь к тому, что вы получаете более точные меры.
Кстати, на моем последнем настольном компьютере GNU / Linux (ядро 4.2, Debian / Sid / x86-64) i3770K, «system» - как time (2) или clock_gettime(2) работает примерно за 3 или 4 наносекунды (благодаря vdso (7) , которые позволяют избежать бремени реального системного вызова ...), чтобы вы могли использовать их внутри ваша программа довольно часто.