gettimeofday () prawdopodobnie zrobi to, co chcesz.
Jeśli korzystasz ze sprzętu firmy Intel, oto jak odczytać licznik instrukcji procesora w czasie rzeczywistym. Podaje liczbę cykli procesora wykonanych od momentu uruchomienia procesora. Jest to prawdopodobnie najdrobniejszy, najniższy licznik, jaki można uzyskać do pomiaru wydajności.
Zauważ, że jest to liczba cykli procesora. W Linuksie możesz pobrać prędkość procesora z / proc / cpuinfo i podzielić, aby uzyskać liczbę sekund. Konwersja tego na podwójną jest całkiem przydatna.
Kiedy uruchomię to na moim pudełku, dostaję
11867927879484732
11867927879692217
tak długo trwało wywołanie printf: 207485
Oto przewodnik dla programistów firmy Intel, który zawiera mnóstwo szczegółów.
#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);
}