Pregunta

Parece la mayoría de los nuevos procesadores de AMD e Intel aplicar RDTSC como un contador de velocidad constante, evitando los problemas causados ??por el cambio de frecuencia como resultado de cosas como la configuración de ahorro de energía o función turbo.

Como RDTSC es mucho más adecuado para mediciones de rendimiento que QueryPerformanceCounter debido a su mucho menos gastos generales, me gustaría utilizar siempre que sea posible.

¿Cómo puedo detectar de forma fiable si el RDTSC es un contador de velocidad constante o no?

¿Fue útil?

Solución

Se puede utilizar CPUID decirle. De los documentos en CPUID Fn8000_0007_EDX bit 8:

TscInvariant: TSC invariante . La tasa de TSC está garantizada para ser invariantes en todos los P-Unidos, C-Unidos, y las transiciones de parada de subvención (tales como STPCLK Throttling); por lo tanto, el TSC es adecuado para su uso como una fuente de tiempo. 0 = No existe tal garantía se hace y se debe evitar el software de intentar utilizar el TSC como fuente de tiempo.

Otros consejos

Sé que es mucho tiempo que la pregunta original se le pidió, pero puede que acabo de señalar que el control de la generación / modelo del procesador es absolutamente lo peor que puede hacer. En primer lugar, es muy fácil conseguir el mal código para que no funciona en procesadores de la generación futura (debido a que los números de la familia / modelo no son siempre "lineal"), y en segundo lugar, sólo porque un procesador es "una tarde familia / modelo" que las que usted sabía esto funciona en, no es una garantía de que la función está allí. Es probable, pero he visto un montón de código que hace este mal, y por lo tanto "nuevo procesador sale, y el código obtiene cosas mal".

Utilice el CPUID poco para comprobar si el procesador tiene el bit correcto o no.

El uso justo CPUID para detectar la generación href="http://en.wikipedia.org/wiki/Time_Stamp_Counter" de la CPU , ver si su uso de contadores constantes. Sin embargo me gustaría, sugerir el uso de una API de perfiles de lugar, sin embargo, algo así como SDK CodeAnalyst de AMD haría bien

hago contar el número o las garrapatas en un segundo y luego comparar con el reloj informado en / proc / cpuinfo. Sólo funciona con el reloj dinámico desactivado. Ver la fuente: https://github.com/petersenna/rdtscbench

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top