Как рассчитать и распечатать время clock_t примерно

Я рассчитываю, сколько времени потребуется для выполнения трех различных типов поиска: последовательного, рекурсивного двоичного и итеративного двоичного. У меня есть те, на месте, и это итерация и завершить поиск. Моя проблема в том, что, когда я проверяю их время, я каждый раз получаю 0 для всех из них, даже если я создаю массив из 100 000 и у меня он ищет что-то не в этом массиве. Если я устанавливаю точку останова в поиске, это, очевидно, удлиняет время и дает мне разумное время, с которым я могу работать. Но в противном случае это всегда 0. Вот мой код, он похож на все три таймера поиска.

 clock_t recStart = clock();
mySearch.recursiveSearch(SEARCH_INT);
clock_t recEnd = clock();
clock_t recDiff = recEnd - recStart;
double recClockTime = (double)recDiff/(double)CLOCKS_PER_SEC;
cout << recClockTime << endl;

cout << CLOCKS_PER_SEC << endl;

cout << recClockTime << endl;

За последние два я получаю 1000 а также 0,

Я что-то здесь не так делаю? Или это в моем поиске объекта?

1

Решение

clock() это не точный таймер, и он просто не работает хорошо для определения временных интервалов.

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

Если между двумя последовательными вызовами часов ваша программа занимает меньше времени, чем одно целое функции часов, вы можете получить 0. POSIX clock определяет единство с CLOCKS_PER_SEC как 1000000 (тогда единица равна 1 микросекунде).

(http://pubs.opengroup.org/onlinepubs/009604499/functions/clock.html)

Для измерения тактовых циклов в x86 / x64 вы можете использовать сборку, чтобы получить счетчик тактов регистра счетчика меток времени CPU. rdtsc, (что может быть достигнуто путем встроенной сборки?) Обратите внимание, что он возвращает отметку времени, а не количество прошедших секунд. Таким образом, вам также необходимо получить частоту процессора.

Однако лучший способ получить точное время в секундах зависит от вашей платформы.


Подводя итог, практически невозможно добиться расчета и печати clock_t время в секундах точно. Возможно, вы захотите увидеть этот на Stackoverflow, чтобы найти лучший подход (если точность является главным приоритетом).

3

Другие решения

clock() просто не хватает разрешения — вот одна хорошая дискуссия / блог на эту тему
http://www.guyrutenberg.com/2007/09/10/resolution-problems-in-clock/

Я думаю, что два варианта либо использовать clock_gettime или даже лучше вы рассматривали возможность использования OProfile или же CodeAnalyst?

Я лично предпочитаю использовать инструменты — OProfile — это хорошо. Я не использовал CodeAnalyst раньше — а затем есть Valgrind и gprof.

Если вы настаиваете на использовании clock_gettime — пожалуйста, проверьте это
http://www.guyrutenberg.com/2007/09/22/profiling-code-using-clock_gettime/

2

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector