KriegeR
@KriegeR
Software Engineer

Измерить время выполнения алгоритма?

Всем привет!

Подскажите, плиз, как замерить время выполнения алгоритма на Си под Linux?

На текущий момент, использую библиотеку time.h

clock_t startClock, endClock;<br/>
startClock = clock();<br/>
//Код<br/>
endClock = clock();<br/>
diff = difftime(endClock, startClock);<br/>


Но если операций слишком мало, всегда на выходе получаю 0.

Хотелось бы что-нибудь поточнее, как например, в Java System.nanoTime().
  • Вопрос задан
  • 6848 просмотров
Пригласить эксперта
Ответы на вопрос 3
leventov
@leventov
Просто поточнее —
typedef unsigned long long ull;

inline ull rdtsc() {
	unsigned int lo, hi;
	asm volatile ( "rdtsc\n" : "=a" (lo), "=d" (hi) );
	return ((ull)hi << 32) | lo;
}
Вместо clock.
Могу написать статью, как мерить небольшие куски си-кода без всякой погрешности.
Ответ написан
@BrainHacker
Если вы хотите просто знать, сколько времени выполняется алгоритм, то существует стандартная схема:
1. Запустить таймер.
2. Выполнить алгоритм N раз.
3. Остановить таймер и замерить время.

Тогда время выполнения алгоритма один раз будет равно <замеренное_время> / N. Чем больше N, тем точнее значение.
Ответ написан
huankun
@huankun
man gettimeofday
измерение времени с точностью до микросекунд (под Linux)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы