Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 93, средняя оценка - 4.61
Svinina
5 / 5 / 0
Регистрация: 28.11.2010
Сообщений: 81
#1

как с точностью до микросекунд замерить время - C++

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

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

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

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

Замерить время вычислений - C++
Добрый вечер. Есть ли способ замерить продолжительность процесса вычислений, детали которых скрыты? Есть объект, который производит...

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

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

Текущее время с точностью до миллисекунд - C++
Здравствуйте! Столкнулся со следующей проблемой. Нужно узнать текущее время с точностью до миллисекунд, использую time.h, но там можно...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
16.11.2011, 13:09 #16
Цитата Сообщение от Deviaphan Посмотреть сообщение
Стандартными средствами - никак.
В миллисекундах - без проблем.
В микро - проблематично.
Можно и в пико, но это не означает соответствующей точности: единицы измерения - это одно, погрешность - совсем другое. Берём часы, засекаем время и запускаем функцию, потом часы умножаем на 3 600 000 000 000 000, минуты - на 60 000 000 000 000, секунды - на 1 000 000 000 000, всё складываем и радуемся времени в пикосекундах, но с погрешность плюс/минус несколько секунд. А можно провести измерения каким нибудь сверхточным прибором с точностью до пикосекунды, но результат выразить в годах.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
16.11.2011, 13:09 #17
Вот POSIX http://www.boost.org/doc/libs/1_48_0...osix_time.html
Bers
Заблокирован
16.11.2011, 13:09 #18
Цитата Сообщение от Deviaphan Посмотреть сообщение
У меня частота проца колеблется в диапазоне примерно гигагерца. Это между работой в полусонном состоянии и под максимальной нагрузкой. Так что количеству герц я не доверяю.)))
Но если его загрузить на 100% он уже не будит в полусонном состоянии.
Кроме того, это позволит снизить погрешность на "многозадачность"
Svinina
5 / 5 / 0
Регистрация: 28.11.2010
Сообщений: 81
16.11.2011, 13:10  [ТС] #19
taras atavin, да-да, я изучал метрологию.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
16.11.2011, 13:11 #20
Цитата Сообщение от taras atavin Посмотреть сообщение
радуемся времени в пикосекундах, но с погрешность плюс/минус несколько секунд
Перечитай название темы. Точность и погрешность - слова синонимы.
ForEveR
В астрале
Эксперт С++
7971 / 4733 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
16.11.2011, 13:12 #21
Svinina,
C++
1
2
3
boost::posix_time::ptime now = boost::posix_time::microsec_clock::universal_time();
//Действия
std::cout << (boost::posix_time::microsec_clock::universal_time() - now).total_microseconds() << std::endl;
Deviaphan
16.11.2011, 13:14
  #22

Не по теме:

Цитата Сообщение от Bers Посмотреть сообщение
Но если его загрузить на 100% он уже не будит в полусонном состоянии
Измерял производительность при помощи AIDA (или как там её). В начале теста скорость была ниже номинальной. В середине выше. Под конец снова чуть ниже. А ведь это серьёзно спроектированный тест производительности системы. А как ты предлагаешь на 100% загрузить многопроцессорный комп? Циклом?

Svinina
5 / 5 / 0
Регистрация: 28.11.2010
Сообщений: 81
16.11.2011, 13:18  [ТС] #23
А функция clock в чем выдает время?

Не по теме:

в мане про нее почему-то ничего не могу найти



Добавлено через 1 минуту
ForEveR, там где я буду тестить программу, boostа скорее всего нет.
Bers
Заблокирован
16.11.2011, 13:22 #24
Цитата Сообщение от Deviaphan Посмотреть сообщение
Измерял производительность при помощи AIDA (или как там её). В начале теста скорость была ниже номинальной. В середине выше. Под конец снова чуть ниже. А ведь это серьёзно спроектированный тест производительности системы. А как ты предлагаешь на 100% загрузить многопроцессорный комп? Циклом?
Я понятия не имею, как там Аида работает. Может она на 1 процессорный рассчитана?
Но я знаю, что тесты тем более точные, чем больше делалось количество замеров. И брать нужно усредненные значения. И в любом случае будит погрешность. Вопрос только в том, какая.

На одно процессорном компе оценивать секунды тиками с помощью rdtsc было вполне нормальным вариантом. Во всяком случае разбега в показаниях сильного не наблюдалась.

А вот на многоядерниках сразу затупила.
fasked
Эксперт С++
4935 / 2515 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
17.11.2011, 10:20 #25
Цитата Сообщение от Svinina Посмотреть сообщение
там где я буду тестить программу, boostа скорее всего нет.
Лезем в исходники буста и убираем все лишнее
ForEveR
В астрале
Эксперт С++
7971 / 4733 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
17.11.2011, 11:03 #26
Можно и через std::chrono. Но там в system_clock взависимости от системы измерение выбирается... С кастом не разбирался.
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
17.11.2011, 11:14 #27
Цитата Сообщение от Deviaphan Посмотреть сообщение
Перечитай название темы. Точность и погрешность - слова синонимы.
Я отвечал не ТСу.

Добавлено через 9 минут
Кстати, можно поднять и точность циклом. Какова погрешность измерения длительности при значениях порядка минуты? Если даже плюс/минус секунда, а цикл на миллион ровно в эту минуту уложится, то вот вам и точность одного прохода плюс/минус микросекунда: делим время всего цикла на число повторов, относительная погрешность сохраняется, а абсолютная делится на тот же делитель. Мало того, точно таким же образом можно даже с помощью обычных часов без секундной стрелки получить точность плюс/минус наносекунда: повтори 300 миллиардов раз, а общее время измерь с точностью плюс/минус 5 минут, потом раздели и радуйся сверхточности, но только в абсолютном, а не относительном выражении. Но надо, чтоб проверка счётчика и переход в начало цикла выполнялись много быстрее однократного исполнения самой функции, иначе добавляется значимая погрешность самого цикла.
solar_wind
756 / 747 / 42
Регистрация: 06.07.2009
Сообщений: 2,969
Завершенные тесты: 1
17.11.2011, 11:21 #28
taras atavin, Никакой точности ты так не получишь. Если измерять время работы программы, то оно в зависимости от разных внешних причин будет различным, причем будет отличаться на миллисекунды. И твое значение с точностью микросекунда, будет не ценнее чем значение с точностью миллисекунда.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
17.11.2011, 11:22 #29
Цитата Сообщение от vitaly1981 Посмотреть сообщение
И твое значение с точностью микросекунда
...будет средней температурой по больнице.
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
17.11.2011, 11:52 #30
Цитата Сообщение от vitaly1981 Посмотреть сообщение
Никакой точности ты так не получишь. Если измерять время работы программы, то оно в зависимости от разных внешних причин будет различным, причем будет отличаться на миллисекунды.
Время миллиона повторов, различающееся на миллисекунды - http://www.cyberforum.ru/cgi-bin/latex.cgi?t=T/N, где t-искомое время, T - истинное время работы цикла, N - число шагов цикла.
http://www.cyberforum.ru/cgi-bin/latex.cgi?T=T_i+\delta T, где http://www.cyberforum.ru/cgi-bin/latex.cgi?T_i - измеренное время, http://www.cyberforum.ru/cgi-bin/latex.cgi?\delta T - неизвестная фактическая погрешность измерения, о которой известно только, что её модуль не превышает определённой величины. http://www.cyberforum.ru/cgi-bin/latex.cgi?t=\left(T_i+\delta T \right)/N, теперь выразим t аналогично T: http://www.cyberforum.ru/cgi-bin/latex.cgi?t=t_i+\delta t, где t - истинное значение, t_i - результат косвенного измерения, http://www.cyberforum.ru/cgi-bin/latex.cgi?\delta t - погрешность косвенного измерения, сопоставляем: http://www.cyberforum.ru/cgi-bin/latex.cgi?t_i+\delta t=\left(T_i+\delta T \right)/N, а считали мы так: http://www.cyberforum.ru/cgi-bin/latex.cgi?t_i=T_i/N, тогда: http://www.cyberforum.ru/cgi-bin/latex.cgi?T_i/N+\delta t=\left(T_i+\delta T \right)/N, раскрываем скобки: http://www.cyberforum.ru/cgi-bin/latex.cgi?T_i/N+\delta t=T_i/N+\delta T/N, упрощаем: http://www.cyberforum.ru/cgi-bin/latex.cgi?T_i/N-T_i/N+\delta t=\delta T/N http://www.cyberforum.ru/cgi-bin/latex.cgi?\delta t=\delta T/N, вспоминаем, что http://www.cyberforum.ru/cgi-bin/latex.cgi?\delta T/N по модулю не превышает пяти минут (трёхсот секунд), а N равняется трёмста миллионам и приходим к тому, что http://www.cyberforum.ru/cgi-bin/latex.cgi?\delta t/N по модулю не превышает микросекунды. Это азы метрологии.

Добавлено через 2 минуты
Цитата Сообщение от Deviaphan Посмотреть сообщение
будет средней температурой по больнице.
Ага. Средняя температура воздуха в больнице. А теперь вспоминаем, что температура - мера средней энергии, то есть параметр статистический. И если на интересует воздух не в палате, а во всей больнице, то таким образом у нас и будет точное значение этой температуры. Не средней температуры, а просто температуры. Мера средней энергии молекул воздуха, усреднённой по всему воздуху, а не по части, приходящейся на палату.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.11.2011, 11:52
Привет! Вот еще темы с ответами:

таймер микросекунд - C++
Нужно оценить эффективность работы алгоритма кодирования данных по методу Хаффмана, для этого следует установить на фрагменты выполнения...

время запуска/конца выполнения программы с точностью до миллисекунд - C++
С. как сделать чтобы в начале программы выводилась дата и время с миллисекундами и тоже самое при её завершении?

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

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
17.11.2011, 11:52
Ответ Создать тему
Опции темы

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