gettimeofday (), ймовірно, зробить те, що ви хочете.
Якщо ви працюєте на апаратному забезпеченні Intel, ось як читати лічильник інструкцій процесора в режимі реального часу. Це покаже вам кількість циклів процесора, виконаних з часу завантаження процесора. Це, мабуть, найдрібніший, найнижчий лічильник накладних витрат, який ви можете отримати для вимірювання продуктивності.
Зверніть увагу, що це кількість циклів процесора. У Linux ви можете отримати швидкість процесора з / proc / cpuinfo і розділити, щоб отримати кількість секунд. Перетворити це на подвійне дуже зручно.
Коли я запускаю це на своїй коробці, я отримую
11867927879484732
11867927879692217
потрібно було так багато часу, щоб зателефонувати 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);
}