2011-06-17 10 views
10

Estoy trabajando con la optimización de un software y quiero medir el rendimiento. Así que actualmente estoy simulando una plataforma ARM con OVP (plataforma virtual abierta) y obtengo las estadísticas como tiempo de simulación e instrucciones simuladas.¿Cómo medir el rendimiento de ARM?

Mi pregunta es, ¿por qué las instrucciones simuladas son diferentes cada vez que ejecuto el software (diferente, pero muy cerca)? ¿No debería ser lo mismo cada vez? Si no es así, el software que escribo en C se compilará en instrucciones de ensamblador ARM, y cada vez que se ejecute el programa, las instrucciones simuladas serán ¿cuántas veces se ejecutarán estas instrucciones de ensamblador ARM? Debería ser lo mismo cada vez?

¿Cómo debo medir el rendimiento? Toma 10 muestras de instrucciones simuladas y obtén el promedio?

+0

Algunos sistemas pueden estar dentro de un tiempo de reloj del dispositivo de medición para cada ciclo, para algunos sistemas hay dinámicas involucradas que no permiten que eso suceda. Y podría estar relacionado con lo que estás haciendo de todos modos. ¿Estás ejecutando incrustado o encima de un sistema operativo? ¿Qué tipo de software está hablando con periféricos, a través de una red, etc.? –

+3

el número de instrucciones puede variar dependiendo de lo que esté haciendo, digamos que tiene un bucle de 20 instrucciones de sondeo para algún evento o periférico para finalizar algo. Si de una carrera a la siguiente, simplemente se pierde un evento y tiene que ejecutar nuevamente el ciclo, hay una diferencia de 20 instrucciones. Haga que eso ocurra varias veces por simulación y eso puede agregar diferencias notables. Si adaptas el código y la prueba a algo que nunca puede confiar en eventos externos y que por diseño va a ejecutar la misma ruta, entonces sí, debería ser igual cada vez. –

+0

¿Qué tipo de rendimiento estás tratando de medir? CPU, memoria, IO, red? Si hablamos de CPU, puede que merezca la pena intentarlo con bogomips. – PhilW

Respuesta

4

Desde mi experiencia en un verdadero (no simulado) ARM, si tomo cuentas de ciclo para una sección del código del número de ciclos puede variar, esto se debe a:

  • No puede haber cambios de contexto en el medio de tu código de ejecución.
  • El estado inicial de la CPU puede ser diferente al ingresar a la sección de códigos. (por ejemplo, el contenido de la canalización, predicción de bifurcación, etc.)
  • El estado de la memoria caché será diferente al ingresar a la sección de códigos.
  • Factores externos como otro hardware que accede a la memoria externa.

Debido a todo esto, tomar un promedio (más algunas otras medidas estadísticas) es realmente el único enfoque práctico para el hardware real y un sistema operativo real. En un buen simulador, algunos de estos factores o potencialmente eliminados.

En algunos chips reales (o si es compatible con el simulador) el ARM Performance Monitoring Unit puede ser útil.

Si está codificando para el Cortex A8 this es un contador de ciclos en línea que realmente puede ayudarlo a obtener más rendimiento de su código.

Cuestiones relacionadas