Я думаю, что это должно работать:
#include <time.h>
clock_t start = clock(), diff;
ProcessIntenseFunction();
diff = clock() - start;
int msec = diff * 1000 / CLOCKS_PER_SEC;
printf("Time taken %d seconds %d milliseconds", msec/1000, msec%1000);
gettimeofday (), вероятно, сделает то, что Вы хотите.
, Если Вы находитесь на аппаратных средствах Intel, вот то, как считать ЦП счетчик команд в реальном времени. Это скажет Вам количество циклов ЦП, выполняемых, так как процессор был загружен. Это - вероятно, самый низкий служебный счетчик с самыми прекрасными зернами, который можно получить для измерения производительности.
Примечание, что это - количество циклов ЦП. На Linux можно получить скорость ЦП от/proc/cpuinfo и разделиться для получения числа секунд. Преобразование этого к двойному довольно удобно.
, Когда я выполняю это на своем поле, я добираюсь
11867927879484732 11867927879692217 it took this long to call printf: 207485
, Вот Руководство разработчика Intel, которое дает тонны детали.
#include <stdio.h>
#include <stdint.h>
inline uint64_t rdtsc() {
uint32_t lo, hi;
__asm__ __volatile__ (
"xorl %%eax, %%eax\n"
"cpuid\n"
"rdtsc\n"
: "=a" (lo), "=d" (hi)
:
: "%ebx", "%ecx");
return (uint64_t)hi << 32 | lo;
}
main()
{
unsigned long long x;
unsigned long long y;
x = rdtsc();
printf("%lld\n",x);
y = rdtsc();
printf("%lld\n",y);
printf("it took this long to call printf: %lld\n",y-x);
}
gettimeofday возвратит время с точностью до микросекунд в разрешении системных часов. Вы могли бы также хотеть проверить Таймеры С высоким разрешением проект на SourceForge.