Как я могу позвонить clock()
вC++
?
Например, я хочу проверить, сколько времени занимает линейный поиск, чтобы найти данный элемент в массиве.
c++
benchmarking
clock
Дато Датуашвили
источник
источник
perf stat -d ./a.out
Ответы:
источник
clock()
иclock_t
взяты из заголовка C Standard Librarytime.h
, и поэтому не нуждаются в использованииstd
префиксов пространства имен после включения их библиотек.<ctime>
оборачивает это значение и функциюstd
пространством имен, но это не обязательно. Подробности реализации см. Здесь: en.cppreference.com/w/cpp/header/ctimeАльтернативным решением, которое является переносимым и с более высокой точностью, доступным с C ++ 11, является использование
std::chrono
.Вот пример:
Запуск этого на ideone.com дал мне:
источник
using Clock=std::chrono::high_resolution_clock;
. См. Псевдоним типа .std::chrono::high_resolution_clock
не является монотонным во всех реализациях std lib. Из cppreference - как правило, следует просто использовать std :: chrono :: stable_clock или std :: chrono :: system_clock напрямую вместо std :: chrono :: high_resolution_clock: используйте stable_clock для измерения продолжительности и system_clock для времени настенных часов.clock()
возвращает количество тактов часов с момента запуска вашей программы. Существует связанная константа,CLOCKS_PER_SEC
которая сообщает вам, сколько тактов часов происходит за одну секунду. Таким образом, вы можете протестировать любую операцию так:источник
timeInSeconds
всегда идет0.000000
за мной. Как бы это исправить?long double
для большей точности.По крайней мере, в Windows единственным практически точным механизмом измерения является QueryPerformanceCounter (QPC). std :: chrono реализуется с его использованием (начиная с VS2015, если вы его используете), но он не точен в той же степени, что и использование QueryPerformanceCounter напрямую. В частности, утверждение о том, что отчет с точностью до 1 наносекунды является абсолютно неверным. Итак, если вы измеряете что-то, что занимает очень короткое время (и ваш случай может быть именно таким), вам следует использовать QPC или эквивалент для вашей ОС. Я столкнулся с этим при измерении задержек кэша и сделал здесь несколько заметок, которые могут оказаться полезными; https://github.com/jarlostensen/notesandcomments/blob/master/stdchronovsqcp.md
источник
источник
Возможно, вас заинтересует такой таймер: H: M: S. Мксек.
код в ОС Linux:
источник
usleep
не всегда вернетесь точно после суммы, которую вы просите. Иногда это будет дольше. Вы должны проверить текущее время в начале, затем проверить текущее время и вычесть, чтобы получить абсолютное время с момента начала каждого цикла.вы можете измерить, как долго работает ваша программа. Следующие функции помогают измерить процессорное время с момента запуска программы:
моя ссылка : набор инструментов для алгоритмов, неделя 1, часть курса по структурам данных и алгоритмам, специализация Калифорнийского университета в Сан-Диего и Национального исследовательского университета Высшей школы экономики
поэтому вы можете добавить эту строку кода после вашего алгоритма
Ожидаемый результат: результат, представляющий количество
clock ticks per second
источник