2010-07-15 14 views
6

Quiero escribir un montón de optimizaciones para gcc usando algoritmos genéticos. Necesito medir el tiempo de ejecución de las funciones de un ensamblaje para algunas funciones de ajuste y estadísticas. No se puede utilizar la medición de tiempo habitual, ya que está influenciada por el tamaño de la memoria caché.
Necesito una tabla donde pueda ver algo como esto.Cómo medir el tiempo de ejecución de los comandos de ensamblado x86 y x86-64 en los ciclos del procesador?

command | operands | operands sizes | execution cycles 

Am I missunderstanding something? Perdón por mal inglés.

+0

Tu inglés está bien. Solo tengo una queja: no sé si alguna vez llegará el día en que las personas que buscan un poco de aceleración porcentual a través de la micro optimización también comprendan el valor de obtener muchos factores de aceleración a través de la optimización macro, lo que los compiladores no pueden hacer. –

+0

Posible duplicado de [¿Cuántos ciclos de CPU se necesitan para cada instrucción de ensamblaje?] (Http://stackoverflow.com/questions/692718/how-many-cpu-cycles-are-needed-for-each-assembly-instruction) –

Respuesta

2

Con moderna CPU, no hay mesas simples para buscar la duración de una instrucción se llevará a completar (aunque existan dichas tablas para algunos procesadores de edad, por ejemplo, 486). Su mejor información sobre lo que hace cada instrucción y cuánto tiempo puede tomar proviene del fabricante del chip. P.ej. Intel's documentation manuals son bastante buenos (también hay un manual de optimización en esa página).

En casi todas las CPU modernas también está la instrucción RDTSC que lee el contador de marca de tiempo para el procesador en el que el código se ejecuta en EDX:EAX. También hay trampas con esto, pero esencialmente si el código que está perfilando es representativo de una situación de uso real, su ejecución no se interrumpe o cambia a otro núcleo de CPU, entonces puede usar esta instrucción para obtener los tiempos que desea. Es decir. rodee el código que está optimizando con dos instrucciones RDTSC y tome la diferencia en TSC como el tiempo. (Las variaciones en los tiempos en diferentes pruebas/situaciones pueden ser geniales; las estadísticas son su amigo).

1

Puede instrumentar su código usando el ensamblado (rdtsc y amigos) o utilizando una API de instrumentación como PAPI. No es posible medir con precisión los ciclos del reloj que se gastaron durante la ejecución de una instrucción, sin embargo, puede consultar los manuales del desarrollador de la arquitectura para obtener las mejores estimaciones.

En ambos casos, debe tener cuidado al tener en cuenta los efectos de la ejecución en un entorno SMP.

Cuestiones relacionadas