Не то чтобы это не сработало.На самом деле это так.Но это неправильный способ измерения времени, поскольку функция clock ()
возвращает приблизительное значение процессорного времени, используемого программой.Я не уверен насчет других платформ, но в Linux вы должны использовать clock_gettime ()
с флагом CLOCK_MONOTONIC
- это даст вам реальное истекшее время.Кроме того, вы можете прочитать TSC , но имейте в виду, что он не будет работать, если у вас многопроцессорная система и ваш процесс не привязан к конкретному ядру.Если вы хотите проанализировать и оптимизировать свой алгоритм, я бы порекомендовал вам использовать некоторые инструменты измерения производительности.Я давно пользуюсь Intel vTune и очень доволен.Он покажет вам не только то, какая часть использует больше всего циклов, но выделит проблемы с памятью, возможные проблемы параллелизма и т. Д. Вы можете быть очень удивлены результатами.Например, большинство циклов ЦП может быть потрачено на ожидание шины памяти.Надеюсь, это поможет!
ОБНОВЛЕНИЕ: На самом деле, если вы работаете в более поздних версиях Linux, он может предоставить CLOCK_MONOTONIC_RAW
, который представляет собой аппаратные часы, которые не подлежат настройкам NTP.Вот небольшой фрагмент кода, который вы можете использовать: