gettimeofday() probablemente haga lo que quiera.
Si tiene hardware Intel, a continuación le mostramos cómo leer el contador de instrucciones en tiempo real de la CPU. Le indicará la cantidad de ciclos de CPU ejecutados desde que se inició el procesador. Este es probablemente el contador más alto y de grano más fino que puede obtener para medir el rendimiento.
Tenga en cuenta que este es el número de ciclos de la CPU. En Linux, puede obtener la velocidad de CPU de/proc/cpuinfo y dividir para obtener el número de segundos. Convertir esto a un doble es bastante útil.
Cuando ejecuto esto en mi caja, me sale
11867927879484732
11867927879692217
it took this long to call printf: 207485
Aquí está la Intel developer's guide que da un montón de detalles.
#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);
}
Esto es realmente bueno ya que le da tiempo de CPU en lugar de tiempo transcurrido (tiempo transcurrido podría verse afectada por otros procesos). Solo tenga en cuenta que una cifra de 10 segundos no significa necesariamente que se ejecutará en un tiempo transcurrido de 10 segundos, ya que puede haber consideraciones de E/S. Esto mide la CPU ** SOLAMENTE **. – paxdiablo
Lo usé cientos de veces y es la mejor/más fácil solución para esta pregunta – Gerhard
¿cuál es la resolución de tiempo del reloj()? y por qué diff * 1000? –