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

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

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

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

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

Товарищи, подскажите, как с точностью до микросекунд замерить время выполнения некоторой функции?
0
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, но там можно...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
solar_wind
756 / 747 / 42
Регистрация: 06.07.2009
Сообщений: 2,969
Завершенные тесты: 1
17.11.2011, 11:53 #31
taras atavin, Мы это прекрасно все знаем, но вот смотри, допустим ты получишь какое то значение с точностью до микросекунды. Запускаем программу еще раз и новое значение отличается от твоего на 30 миллисекунд, и где точность?
0
Bers
Заблокирован
17.11.2011, 11:54 #32
Цитата Сообщение от vitaly1981 Посмотреть сообщение
taras atavin, Мы это прекрасно все знаем, но вот смотри, допустим ты получишь какое то значение с точностью до микросекунды. Запускаем программу еще раз и новое значение отличается от твоего на 30 миллисекунд, и где точность?
Специально для тупых: многозадачные системы, аля Виндовс, Линукс, и тп никогда не дадут точного замера.

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

Для этого и используют статистику
0
solar_wind
756 / 747 / 42
Регистрация: 06.07.2009
Сообщений: 2,969
Завершенные тесты: 1
17.11.2011, 11:57 #33
Bers, Так понятно что не дадут, я о том и говорю.
0
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1287 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
17.11.2011, 12:01 #34
Чтобы получить "усреднённое" время выполнения функции лично я готов сделать порядка десяти запусков. Не более.
И это в автоматическом режиме.)

Добавлено через 44 секунды
taras atavin, математический смысл несколько отличается от практического.
0
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
17.11.2011, 12:01 #35
Переносимый вариант без буста.

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
Bers
Заблокирован
17.11.2011, 12:09 #36
Цитата Сообщение от vitaly1981 Посмотреть сообщение
Bers, Так понятно что не дадут, я о том и говорю.
дык если тебя устраивает погрешность, чего тогда париться?
А если ещё математически её дополнительно можно улучшить хитроумными формулами, совсем хорошо.

Но вообще то, если очень сильно надо высокую точность, нужно выбирать другую ОС
0
solar_wind
756 / 747 / 42
Регистрация: 06.07.2009
Сообщений: 2,969
Завершенные тесты: 1
17.11.2011, 12:14 #37
Bers, Так в том то и дело что taras atavin предлагает считать в миллисекундах по таймеру, а потом статистическим методом получить точность до микросекунды.
Под многозадачной операционкой можно получить точность до микросекунды, но только для каких то вычислений, но не для программы, притом забив одно ядро проца на 100%
0
Bers
Заблокирован
17.11.2011, 12:19 #38
Цитата Сообщение от vitaly1981 Посмотреть сообщение
Bers, Так в том то и дело что taras atavin предлагает считать в миллисекундах по таймеру, а потом статистическим методом получить точность до микросекунды.
Под многозадачной операционкой можно получить точность до микросекунды, но только для каких то вычислений, но не для программы, притом забив одно ядро проца на 100%
Не буду балаболить... но.. скажем так, я слышал (слухами земля полнится), что есть тулзы, которые предназначены для измерения скорости алгоритмов. И позволяют сделать это с очень высокой точностью. Особый вид тестирования.

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

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

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

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

Научите заранее считать фпс?
0
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1287 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
17.11.2011, 12:32 #41
*Сложность алгоритмов вычисляется задолго до начали их программирования.
Увеличение скорости на доли секунды (или даже секунды) в 99.999% по барабану. Важна лишь сложность алгоритма. А она известна на этапе проектирования алгоритма, задолго до начала его реализации.
Если скорость алгоритма (сильно) не устраивают, то меняют алгоритм, а не выполняют оптимизацию.
Оптимизация это самый последний шаг, который лучше не делать.
0
CheshireCat
Эксперт С++
2892 / 1241 / 78
Регистрация: 27.05.2008
Сообщений: 3,370
17.11.2011, 12:40 #42
Не путай сложность алгоритма (которую действительно можно вычислить на этапе проектирования, до его реализации) и время его выполнения. Это не одно и то же.
0
Bers
Заблокирован
17.11.2011, 12:41 #43
Цитата Сообщение от Deviaphan Посмотреть сообщение
*Сложность алгоритмов вычисляется задолго до начали их программирования.
Увеличение скорости на доли секунды (или даже секунды) в 99.999% по барабану. Важна лишь сложность алгоритма. А она известна на этапе проектирования алгоритма, задолго до начала его реализации.
Если скорость алгоритма (сильно) не устраивают, то меняют алгоритм, а не выполняют оптимизацию.
Оптимизация это самый последний шаг, который лучше не делать.
O(log) или О какая.. это как бы речь о сложности алгоритма, да..
Есть такое. Я в этом кстати, ни бум бум. Но здесь же речь не о сложности, а о скорости. Это две большие разницы.

Сложность алгоритма к скорости имеет лишь относительное отношение.

Можно, например, сказать, что один алгоритм работает с постоянной скоростью. Другой - зависит от количества элементов. Ну и тд. Фактическое среднестатистическое знание по времени может дать только эксперимент.
0
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1287 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
17.11.2011, 12:52 #44
Цитата Сообщение от Bers Посмотреть сообщение
Фактическое среднестатистическое знание по времени может дать только эксперимент.
"Среднестатистическое знание" дать никто не сможет. Только для конкретного компьютера при конкретных условиях работы.

О-сложность имеет к скорости самое прямое отношение. Т.к. оптимизации кода, а в некоторых случаях даже языки, можно рассматривать как константу. Т.е. пренебречь при оценке сложности.

Впрочем, согласен. Меня не в ту степь понесло. Тут речь не об этом.
Тут кто-то собирался оценивать скорость алгоритма путём миллиардов запусков? Например алгоритм решения матриц размером 10000х10000 (хотя бы), посчитайте пару миллиардов раз, чтобы среднюю скорость алгоритма вычислить.

Добавлено через 1 минуту
Цитата Сообщение от Deviaphan Посмотреть сообщение
"Среднестатистическое знание" дать никто не сможет.
Извиняюсь. Слово "эксперимент" прочитал как "эксперт". Гугл.транслэйт такой транслэйт.)
0
Svinina
5 / 5 / 0
Регистрация: 28.11.2010
Сообщений: 81
17.11.2011, 20:13  [ТС] #45
Эко вы далеко зашли, товарищи.=)
Нужна была всего лишь функция замера времени для оценки ускорения параллельной программы.
В итоге использовал timeofday().
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.11.2011, 20:13
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

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