Saltar al contenido

rendimiento – ¿El mejor método de cronometraje en C?

noviembre 6, 2021
apple touch icon@2

gettimeofday () probablemente hará lo que quieras.

Si está en hardware Intel, aquí le mostramos cómo leer el contador de instrucciones en tiempo real de la CPU. Le dirá el número de ciclos de CPU ejecutados desde que se inició el procesador. Este es probablemente el contador de gastos generales más fino y más bajo que puede obtener para medir el rendimiento.

Tenga en cuenta que este es el número de ciclos de CPU. En Linux, puede obtener la velocidad de la CPU de / proc / cpuinfo y dividir para obtener el número de segundos. Convertir esto en un doble es bastante útil.

Cuando ejecuto esto en mi caja, obtengo

11867927879484732
11867927879692217
it took this long to call printf: 207485

Aquí esta la Guía para desarrolladores de Intel eso da toneladas de detalles.

#include <stdio.h>
#include <stdint.h>

inline uint64_t rdtsc() {
    uint32_t lo, hi;
    __asm__ __volatile__ (
      "xorl %%eax, %%eaxn"
      "cpuidn"
      "rdtscn"
      : "=a" (lo), "=d" (hi)
      :
      : "%ebx", "%ecx");
    return (uint64_t)hi << 32 | lo;
}

main()
{
    unsigned long long x;
    unsigned long long y;
    x = rdtsc();
    printf("%lldn",x);
    y = rdtsc();
    printf("%lldn",y);
    printf("it took this long to call printf: %lldn",y-x);
}
close