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

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

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

Студворк — интернет-сервис помощи студентам
Товарищи, подскажите, как с точностью до микросекунд замерить время выполнения некоторой функции?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.11.2011, 12:33
Ответы с готовыми решениями:

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

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

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

89
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
16.11.2011, 13:12
Студворк — интернет-сервис помощи студентам
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;
0
16.11.2011, 13:14

Не по теме:

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

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

Не по теме:

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



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

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

А вот на многоядерниках сразу затупила.
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
17.11.2011, 10:20
Цитата Сообщение от Svinina Посмотреть сообщение
там где я буду тестить программу, boostа скорее всего нет.
Лезем в исходники буста и убираем все лишнее
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
17.11.2011, 11:03
Можно и через std::chrono. Но там в system_clock взависимости от системы измерение выбирается... С кастом не разбирался.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
17.11.2011, 11:14
Цитата Сообщение от Deviaphan Посмотреть сообщение
Перечитай название темы. Точность и погрешность - слова синонимы.
Я отвечал не ТСу.

Добавлено через 9 минут
Кстати, можно поднять и точность циклом. Какова погрешность измерения длительности при значениях порядка минуты? Если даже плюс/минус секунда, а цикл на миллион ровно в эту минуту уложится, то вот вам и точность одного прохода плюс/минус микросекунда: делим время всего цикла на число повторов, относительная погрешность сохраняется, а абсолютная делится на тот же делитель. Мало того, точно таким же образом можно даже с помощью обычных часов без секундной стрелки получить точность плюс/минус наносекунда: повтори 300 миллиардов раз, а общее время измерь с точностью плюс/минус 5 минут, потом раздели и радуйся сверхточности, но только в абсолютном, а не относительном выражении. Но надо, чтоб проверка счётчика и переход в начало цикла выполнялись много быстрее однократного исполнения самой функции, иначе добавляется значимая погрешность самого цикла.
0
 Аватар для solar_wind
770 / 760 / 59
Регистрация: 06.07.2009
Сообщений: 3,021
17.11.2011, 11:21
taras atavin, Никакой точности ты так не получишь. Если измерять время работы программы, то оно в зависимости от разных внешних причин будет различным, причем будет отличаться на миллисекунды. И твое значение с точностью микросекунда, будет не ценнее чем значение с точностью миллисекунда.
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
17.11.2011, 11:22
Цитата Сообщение от vitaly1981 Посмотреть сообщение
И твое значение с точностью микросекунда
...будет средней температурой по больнице.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
17.11.2011, 11:52
Цитата Сообщение от vitaly1981 Посмотреть сообщение
Никакой точности ты так не получишь. Если измерять время работы программы, то оно в зависимости от разных внешних причин будет различным, причем будет отличаться на миллисекунды.
Время миллиона повторов, различающееся на миллисекунды - https://www.cyberforum.ru/cgi-bin/latex.cgi?t=T/N, где t-искомое время, T - истинное время работы цикла, N - число шагов цикла.
https://www.cyberforum.ru/cgi-bin/latex.cgi?T=T_i+\delta T, где https://www.cyberforum.ru/cgi-bin/latex.cgi?T_i - измеренное время, https://www.cyberforum.ru/cgi-bin/latex.cgi?\delta T - неизвестная фактическая погрешность измерения, о которой известно только, что её модуль не превышает определённой величины. https://www.cyberforum.ru/cgi-bin/latex.cgi?t=\left(T_i+\delta T \right)/N, теперь выразим t аналогично T: https://www.cyberforum.ru/cgi-bin/latex.cgi?t=t_i+\delta t, где t - истинное значение, t_i - результат косвенного измерения, https://www.cyberforum.ru/cgi-bin/latex.cgi?\delta t - погрешность косвенного измерения, сопоставляем: https://www.cyberforum.ru/cgi-bin/latex.cgi?t_i+\delta t=\left(T_i+\delta T \right)/N, а считали мы так: https://www.cyberforum.ru/cgi-bin/latex.cgi?t_i=T_i/N, тогда: https://www.cyberforum.ru/cgi-bin/latex.cgi?T_i/N+\delta t=\left(T_i+\delta T \right)/N, раскрываем скобки: https://www.cyberforum.ru/cgi-bin/latex.cgi?T_i/N+\delta t=T_i/N+\delta T/N, упрощаем: https://www.cyberforum.ru/cgi-bin/latex.cgi?T_i/N-T_i/N+\delta t=\delta T/N https://www.cyberforum.ru/cgi-bin/latex.cgi?\delta t=\delta T/N, вспоминаем, что https://www.cyberforum.ru/cgi-bin/latex.cgi?\delta T/N по модулю не превышает пяти минут (трёхсот секунд), а N равняется трёмста миллионам и приходим к тому, что https://www.cyberforum.ru/cgi-bin/latex.cgi?\delta t/N по модулю не превышает микросекунды. Это азы метрологии.

Добавлено через 2 минуты
Цитата Сообщение от Deviaphan Посмотреть сообщение
будет средней температурой по больнице.
Ага. Средняя температура воздуха в больнице. А теперь вспоминаем, что температура - мера средней энергии, то есть параметр статистический. И если на интересует воздух не в палате, а во всей больнице, то таким образом у нас и будет точное значение этой температуры. Не средней температуры, а просто температуры. Мера средней энергии молекул воздуха, усреднённой по всему воздуху, а не по части, приходящейся на палату.
0
 Аватар для solar_wind
770 / 760 / 59
Регистрация: 06.07.2009
Сообщений: 3,021
17.11.2011, 11:53
taras atavin, Мы это прекрасно все знаем, но вот смотри, допустим ты получишь какое то значение с точностью до микросекунды. Запускаем программу еще раз и новое значение отличается от твоего на 30 миллисекунд, и где точность?
0
Заблокирован
17.11.2011, 11:54
Цитата Сообщение от vitaly1981 Посмотреть сообщение
taras atavin, Мы это прекрасно все знаем, но вот смотри, допустим ты получишь какое то значение с точностью до микросекунды. Запускаем программу еще раз и новое значение отличается от твоего на 30 миллисекунд, и где точность?
Специально для тупых: многозадачные системы, аля Виндовс, Линукс, и тп никогда не дадут точного замера.

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

Для этого и используют статистику
0
 Аватар для solar_wind
770 / 760 / 59
Регистрация: 06.07.2009
Сообщений: 3,021
17.11.2011, 11:57
Bers, Так понятно что не дадут, я о том и говорю.
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
17.11.2011, 12:01
Чтобы получить "усреднённое" время выполнения функции лично я готов сделать порядка десяти запусков. Не более.
И это в автоматическом режиме.)

Добавлено через 44 секунды
taras atavin, математический смысл несколько отличается от практического.
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
17.11.2011, 12:01
Переносимый вариант без буста.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <chrono>
#include <iostream>
#include <vector>
 
int main()
{
   using namespace std::chrono;
   std::vector<int> vec;
   auto now = time_point_cast<microseconds>(system_clock::now());
   for (size_t i = 0; i < 100000; ++i)
   {
      vec.push_back(i);
   }
   std::cout << (time_point_cast<microseconds>(system_clock::now()) - now).count() << std::endl;
}
0
Заблокирован
17.11.2011, 12:09
Цитата Сообщение от vitaly1981 Посмотреть сообщение
Bers, Так понятно что не дадут, я о том и говорю.
дык если тебя устраивает погрешность, чего тогда париться?
А если ещё математически её дополнительно можно улучшить хитроумными формулами, совсем хорошо.

Но вообще то, если очень сильно надо высокую точность, нужно выбирать другую ОС
0
 Аватар для solar_wind
770 / 760 / 59
Регистрация: 06.07.2009
Сообщений: 3,021
17.11.2011, 12:14
Bers, Так в том то и дело что taras atavin предлагает считать в миллисекундах по таймеру, а потом статистическим методом получить точность до микросекунды.
Под многозадачной операционкой можно получить точность до микросекунды, но только для каких то вычислений, но не для программы, притом забив одно ядро проца на 100%
0
Заблокирован
17.11.2011, 12:19
Цитата Сообщение от vitaly1981 Посмотреть сообщение
Bers, Так в том то и дело что taras atavin предлагает считать в миллисекундах по таймеру, а потом статистическим методом получить точность до микросекунды.
Под многозадачной операционкой можно получить точность до микросекунды, но только для каких то вычислений, но не для программы, притом забив одно ядро проца на 100%
Не буду балаболить... но.. скажем так, я слышал (слухами земля полнится), что есть тулзы, которые предназначены для измерения скорости алгоритмов. И позволяют сделать это с очень высокой точностью. Особый вид тестирования.

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

А вот фактическое время выполнения функции в многозадачных измеряют только в пределах некоторых погрешностей. Сами единицы измерения - всего лишь единицы измерения.

Какая тебе разница сколько это в среднем в милли, или микро секуднах? Главное, что бы из общего графика не выбивалась
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
17.11.2011, 12:21
Цитата Сообщение от Bers Посмотреть сообщение
тулзы, которые предназначены для измерения скорости алгоритмов
Скорость алгоритмов вычисляется задолго до начали их программирования.
0
Заблокирован
17.11.2011, 12:29
Цитата Сообщение от Deviaphan Посмотреть сообщение
Скорость алгоритмов вычисляется задолго до начали их программирования.
Это суровая мысль. Потому что я все время думал - надо сначала собрать архитектуру. А потом уже, если что то не устраивает - оптимизировать.

Но с привязкой по времени - это вдвойне суровая мысль.

Научите заранее считать фпс?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.11.2011, 12:29

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru