Gettimeofday() fera probablement ce que vous voulez.
Si vous êtes sur du matériel Intel, voici comment lire le compteur d'instructions en temps réel du CPU. Il vous indiquera le nombre de cycles du CPU exécutés depuis le démarrage du processeur. Il s'agit probablement du compteur le plus fin et le moins coûteux que vous puissiez obtenir pour mesurer les performances.
Notez qu'il s'agit du nombre de cycles du CPU. Sous linux, vous pouvez obtenir la vitesse du CPU à partir de /proc/cpuinfo et la diviser pour obtenir le nombre de secondes. Convertir ce nombre en double est assez pratique.
Quand j'exécute ceci sur ma boîte, j'obtiens
11867927879484732
11867927879692217
it took this long to call printf: 207485
Voici le Guide du développeur Intel qui donne des tonnes de détails.
#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);
}