Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.56/121: Рейтинг темы: голосов - 121, средняя оценка - 4.56
5 / 5 / 0
Регистрация: 28.11.2010
Сообщений: 81
1

Как с точностью до микросекунд замерить время выполнения функции?

16.11.2011, 12:33. Просмотров 24577. Ответов 89
Метки нет (Все метки)


Товарищи, подскажите, как с точностью до микросекунд замерить время выполнения некоторой функции?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.11.2011, 12:33
Ответы с готовыми решениями:

Как получить время с точностью для микросекунд?
Здравствуйте, помогите чайнику. Сегодня первый день на C. Не могу получить точное время в...

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

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

Как замерить время работы функции?
функция time не подходит, потому что нужна точность хотя бы до 1 милисекунды.

89
Эксперт С++
4256 / 2230 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
16.11.2011, 12:38 2
функция clock():

long t;
t = clock();
//алгоритм
t = clock() - t; // время выполнения
0
770 / 760 / 59
Регистрация: 06.07.2009
Сообщений: 3,020
16.11.2011, 12:38 3
Svinina, Смотря для чего тебе это нужно.
Если измерять вычисления то есть только один наверное способ получить такую точность....это считать тики процессора и никому не передавать управление...но загрузка проца будет хорошая.....
Если обычным способом, то там как минимум погрешность будет миллисекунд 30, и то на одной и той же программе можешь получить разные значения....
0
Делаю внезапно и красиво
Эксперт С++
1310 / 1225 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
16.11.2011, 12:54 4
Стандартными средствами - никак.
В миллисекундах - без проблем.
В микро - проблематично.
0
5 / 5 / 0
Регистрация: 28.11.2010
Сообщений: 81
16.11.2011, 12:58  [ТС] 5
Deviaphan, хорошо, в миллисекундах как?
0
Заблокирован
16.11.2011, 12:59 6
1. Грузим комп на 100%
2. Засекаем количество тактов
3. Ждем 3 секунды (чем дольше, тем лучше)
4. Смотрим сколько тактов прошло. Делим на 3 сек. Получаем кол-во тактов за 1 сек
5. Засекаем такты
6. Гоним цикл с функцией (чем больше, тем лучше)
7. Смотрим сколько тактов прошло. Делим на количество итераций цикла.
8. Сопоставляем: сколько тактов в секунде, и сколько тактов в 1 функции.
9. Профит!

/ps все расчеты будут неточными.
1
Делаю внезапно и красиво
Эксперт С++
1310 / 1225 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
16.11.2011, 12:59 7
GetTickCount() до
и GetTickCount() после.
Разница между вызовами - время в тысячных секунды. Погрешность плюс-минус немного миллисекунд.
0
5 / 5 / 0
Регистрация: 28.11.2010
Сообщений: 81
16.11.2011, 13:00  [ТС] 8
Bers, я так конечно же делать не буду, но все равно спасибо.
0
Делаю внезапно и красиво
Эксперт С++
1310 / 1225 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
16.11.2011, 13:00 9
Цитата Сообщение от Bers Посмотреть сообщение
9. Профит!
Увы, но нет. Процессоры имеют приятное свойство самопроизвольно разгоняться и наоборот. Считать такты процессора можно, а вот сказать за какое время они выполнились...
0
5 / 5 / 0
Регистрация: 28.11.2010
Сообщений: 81
16.11.2011, 13:02  [ТС] 10
Deviaphan, а где она объявлена?
0
770 / 760 / 59
Регистрация: 06.07.2009
Сообщений: 3,020
16.11.2011, 13:03 11
Deviaphan, Кстати мне приходилось подобный таймер организовывать, работает довольно стабильно, только цифру для пересчета я не вычислял, а брал значение с параметров проца )
0
Делаю внезапно и красиво
Эксперт С++
1310 / 1225 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
16.11.2011, 13:05 12
windows.h
0
Заблокирован
16.11.2011, 13:06 13
Цитата Сообщение от Deviaphan Посмотреть сообщение
Увы, но нет. Процессоры имеют приятное свойство самопроизвольно разгоняться и наоборот. Считать такты процессора можно, а вот сказать за какое время они выполнились...
нивелируется множественностью тестов.
0
5 / 5 / 0
Регистрация: 28.11.2010
Сообщений: 81
16.11.2011, 13:06  [ТС] 14
Наверное следовало добавить: пишу под убунтой, меряю быстродействие pthread'ов.
Виндовые варианты немного не катят.=)
0
Deviaphan
16.11.2011, 13:07
  #15

Не по теме:

Цитата Сообщение от vitaly1981 Посмотреть сообщение
а брал значение с параметров проца
У меня частота проца колеблется в диапазоне примерно гигагерца. Это между работой в полусонном состоянии и под максимальной нагрузкой. Так что количеству герц я не доверяю.)))

0
4197 / 1791 / 211
Регистрация: 24.11.2009
Сообщений: 27,563
16.11.2011, 13:09 16
Цитата Сообщение от Deviaphan Посмотреть сообщение
Стандартными средствами - никак.
В миллисекундах - без проблем.
В микро - проблематично.
Можно и в пико, но это не означает соответствующей точности: единицы измерения - это одно, погрешность - совсем другое. Берём часы, засекаем время и запускаем функцию, потом часы умножаем на 3 600 000 000 000 000, минуты - на 60 000 000 000 000, секунды - на 1 000 000 000 000, всё складываем и радуемся времени в пикосекундах, но с погрешность плюс/минус несколько секунд. А можно провести измерения каким нибудь сверхточным прибором с точностью до пикосекунды, но результат выразить в годах.
0
Делаю внезапно и красиво
Эксперт С++
1310 / 1225 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
16.11.2011, 13:09 17
Вот POSIX http://www.boost.org/doc/libs/... _time.html
0
Заблокирован
16.11.2011, 13:09 18
Цитата Сообщение от Deviaphan Посмотреть сообщение
У меня частота проца колеблется в диапазоне примерно гигагерца. Это между работой в полусонном состоянии и под максимальной нагрузкой. Так что количеству герц я не доверяю.)))
Но если его загрузить на 100% он уже не будит в полусонном состоянии.
Кроме того, это позволит снизить погрешность на "многозадачность"
0
5 / 5 / 0
Регистрация: 28.11.2010
Сообщений: 81
16.11.2011, 13:10  [ТС] 19
taras atavin, да-да, я изучал метрологию.
0
Делаю внезапно и красиво
Эксперт С++
1310 / 1225 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
16.11.2011, 13:11 20
Цитата Сообщение от taras atavin Посмотреть сообщение
радуемся времени в пикосекундах, но с погрешность плюс/минус несколько секунд
Перечитай название темы. Точность и погрешность - слова синонимы.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.11.2011, 13:11

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Замерить время выполнения базовых операций
собственно, нужно замерить время выполнени +-*/ для всех типов. делал следующим образом double...

Как замерить длительность выполнения кода?
Нужно замерить длительность выполнения кода. Как?

Как замерить время сортировки массива?
Как узнать время сортировки массива? masInt = Sort(masInt);

Используя О- символику, найдите время выполнения (как функции от N) процедуры или функции в наихудшем случае
Используя О- символику, найдите время выполнения (как функции от N) процедуры или функции в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.