No. Deberá usar un código específico de la plataforma para hacerlo. En x86 y x86-64, puede usar 'rdtsc' para leer el contador de marca de tiempo.
Simplemente transfiera el ensamblado rdtsc que está utilizando.
__inline__ uint64_t rdtsc(void) {
uint32_t lo, hi;
__asm__ __volatile__ ( // serialize
"xorl %%eax,%%eax \n cpuid"
::: "%rax", "%rbx", "%rcx", "%rdx");
/* We cannot use "=A", since this would use %rax on x86_64 and return only the lower 32bits of the TSC */
__asm__ __volatile__ ("rdtsc" : "=a" (lo), "=d" (hi));
return (uint64_t)hi << 32 | lo;
}
Necesito un temporizador de alta resolución para el generador de perfiles integrado en la compilación de Linux de nuestra aplicación. Nuestro generador de perfiles mide alcances tan pequeños como funciones individuales, por lo que necesita una precisión de temporizador superior a 25 nanosegundos.
¿Has considerado oprofile
o perf
? Puede usar el hardware del contador de rendimiento en su CPU para obtener datos de perfiles sin agregar instrumentación al código en sí. Puede ver los datos por función o incluso por línea de código. El "único" inconveniente es que no medirá el tiempo de reloj de pared consumido, medirá el tiempo de CPU consumido, por lo que no es apropiado para todas las investigaciones.