2009-04-24 23 views
9

Me gustaría utilizar el temporizador de eventos de alto rendimiento (HPET) para una herramienta de generación de perfiles para tomar medidas de muy alta precisión, rápidamente. timeGetTime no proporciona una resolución suficiente a 1ms, y QueryPerformanceCounter es mucho más lento por lectura de lo que quisiera. Encontré el HPET mientras investigaba el problema, pero no puedo ver ninguna muestra de cómo hacerlo.¿Es posible acceder directamente al HPET en Windows?

Entonces, ¿puedo usarlo directamente (el montaje está bien), o debo confiar en las herramientas de temporización multimedia/de alto rendimiento ya integradas en la API de Win32?

+1

Me encantaría usarlo también, como supongo sufrir el mismo problema en mi generador de perfiles. – leppie

+0

Esto parece relacionado: http://msdn.microsoft.com/en-us/magazine/cc163996.aspx –

+0

Como una actualización adicional: RDTSC y 'QueryPerformanceCounter' no son seguros de usar cuando el sistema tiene una frecuencia base no constante (overclocking dentro del sistema). Windows no puede ajustar la frecuencia de QPC en esos casos, lo que conduce a tiempos asimétricos. En esos casos, HPET y ACPI siguen siendo las únicas alternativas para un temporizador confiable. ** Por lo tanto, esta pregunta permanece abierta y sin respuesta. ** – Mysticial

Respuesta

-1

Encontré this info mientras busco, y parece que puede ser la forma más rentable. Voy a probarlo cuando tenga las agallas para cavar en el ensamblaje. :)

ACTUALIZACIÓN

He probado esto con mi perfilador. aunque un poco más rápido, parece que todavía tengo toneladas de otros gastos generales :((No me molesté con el tiempo ya que no parecía ser suficiente beneficio)

+3

¡No! No use RDTSC, hará cosas extrañas en máquinas multinúcleo. Cada núcleo que tiene su propio contador puede dar efectos, como funciones que toman el tiempo negativo ect. ¡Los contadores Timestamp no siempre están sincronizados! estado allí, hecho eso. –

+0

¿Y dices que sigues el hilo? ¿Cómo puede eso afectar la diferencia? – leppie

+1

Llevar un registro del hilo simplemente le indicará que * puede * haber un problema, no si * hay * un problema o cómo solucionarlo. Para usar RDTSC de forma segura, * debe * fijar el hilo a un núcleo específico. No hay forma de calcular de forma segura la diferencia RDTSC entre núcleos desde el espacio de usuario. –

1

También estoy interesado en usar el HPET, pero como Como lo entiendo, QueryPerformanceCounter y QueryPerformanceFrequency están accediendo al contador y al reloj para HPET, y esto funciona con Windows XP (ver, por ejemplo, http://www.geisswerks.com/ryan/FAQS/timing.html).

Por lo que respecta al código de temporización, creo utilizando QueryPerformanceCounter, en realidad está accediendo al contador que forma la base de HPET, y todo esto está presente en el chipset (en lugar del procesador).

+2

Según tengo entendido, XP NO es compatible con HPET, por lo que QueryPerformanceCounter realmente está utilizando RDTSC. –

+0

Consulte https://en.wikipedia.org/wiki/High_Precision_Event_Timer#cite_note-7 (observe en XP SP3 en "Uso y compatibilidad") para obtener una explicación completa. En resumen, XP utiliza un "mejor esfuerzo" HPET _emulation_ con software y varios hardware. –

Cuestiones relacionadas