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

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

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

Товарищи, подскажите, как с точностью до микросекунд замерить время выполнения некоторой функции?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.11.2011, 12:33
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как с точностью до микросекунд замерить время выполнения функции? (C++):

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

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

время запуска/конца выполнения программы с точностью до миллисекунд
С. как сделать чтобы в начале программы выводилась дата и время с...

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

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

Unix timestamp замерить время работы программы
Как можно с помощью unix timestamp замерить время работы программы в секундах...

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

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

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

Не по теме:

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

0
taras atavin
4204 / 1763 / 212
Регистрация: 24.11.2009
Сообщений: 27,565
16.11.2011, 13:09 #16
Цитата Сообщение от Deviaphan Посмотреть сообщение
Стандартными средствами - никак.
В миллисекундах - без проблем.
В микро - проблематично.
Можно и в пико, но это не означает соответствующей точности: единицы измерения - это одно, погрешность - совсем другое. Берём часы, засекаем время и запускаем функцию, потом часы умножаем на 3 600 000 000 000 000, минуты - на 60 000 000 000 000, секунды - на 1 000 000 000 000, всё складываем и радуемся времени в пикосекундах, но с погрешность плюс/минус несколько секунд. А можно провести измерения каким нибудь сверхточным прибором с точностью до пикосекунды, но результат выразить в годах.
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
16.11.2011, 13:09 #17
Вот POSIX http://www.boost.org/doc/libs/1_48_0...osix_time.html
0
Bers
Заблокирован
16.11.2011, 13:09 #18
Цитата Сообщение от Deviaphan Посмотреть сообщение
У меня частота проца колеблется в диапазоне примерно гигагерца. Это между работой в полусонном состоянии и под максимальной нагрузкой. Так что количеству герц я не доверяю.)))
Но если его загрузить на 100% он уже не будит в полусонном состоянии.
Кроме того, это позволит снизить погрешность на "многозадачность"
0
Svinina
5 / 5 / 1
Регистрация: 28.11.2010
Сообщений: 81
16.11.2011, 13:10  [ТС] #19
taras atavin, да-да, я изучал метрологию.
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
16.11.2011, 13:11 #20
Цитата Сообщение от taras atavin Посмотреть сообщение
радуемся времени в пикосекундах, но с погрешность плюс/минус несколько секунд
Перечитай название темы. Точность и погрешность - слова синонимы.
0
16.11.2011, 13:11
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.11.2011, 13:11
Привет! Вот еще темы с решениями:

Время выполнения функции
Здравствуйте! Посмотрите пожалуйста, почему у меня время всегда равно 0? ...

Время выполнения функции
Вопрос - как можно измерить время выполнения функции? clock() не подходит, т.к...

Определить время выполнения функции
Здравствуйте По условию контрольной мне необходимо написать ассемблерную...

Блокировка функции на время её выполнения
Есть девайс и прога, соответственно есть ф-ция обращения к девайсу, обращения...


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

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

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