Saltar al contenido

Tiempo de ejecución del ciclo de instrucción del procesador

El paso a paso o código que verás en este artículo es la resolución más eficiente y válida que hallamos a esta inquietud o problema.

Solución:

TODAS las instrucciones requieren más de un ciclo de reloj para ejecutarse. Buscar, decodificar, ejecutar. Si está ejecutando un stm32, es probable que esté tomando varios relojes por búsqueda solo debido a la lentitud del baile de graduación, si se ejecuta desde la RAM, quién sabe si es 168Mhz o más lento. los buses de brazo generalmente necesitan varios ciclos de reloj para hacer cualquier cosa.

Ya nadie habla de ciclos de instrucción porque no son deterministas. La respuesta siempre es “depende”.

Puede tomar X horas construir un solo automóvil, pero si comienza a construir un automóvil, 30 segundos más tarde comienza a construir otro y cada 30 segundos comienza otro, luego de X horas tendrá un nuevo automóvil cada 30 segundos. ¿Eso significa que se necesitan 30 segundos para hacer un automóvil? Por supuesto que no. Pero sí significa que una vez en funcionamiento, puede promediar un automóvil nuevo cada 30 segundos en esa línea de producción.

Así es exactamente como funcionan los procesadores, se necesitan varios relojes por instrucción para ejecutarse, pero canaliza el tema para que muchos estén en la tubería a la vez, de modo que el promedio es tal que el núcleo, si se alimenta con las instrucciones correctas una por reloj, puede completar esas instrucciones una por reloj. Con ramificación y memoria / rom lenta, ni siquiera puede esperar obtener eso.

si quieres hacer un experimento en tu procesador, haz un bucle con unos cientos de nops

beg = read time
load r0 = 100000
top:
  nop
 nop
nop
nop
nop
nop
...
nop
nop
nop
r0 = r0 - 1
bne top
end = read timer

Si se necesitan fracciones de segundo para completar ese ciclo, entonces aumente el número de nops o haga que ejecute un orden de magnitud más de ciclos. En realidad, desea alcanzar una cantidad significativa de tics del temporizador, no necesariamente segundos o minutos en un reloj de pared, sino algo en términos de un buen número de tics del temporizador.

Luego haz los cálculos y calcula el promedio.

Repita el experimento con el programa sentado en ram en lugar de rom

Reduzca la velocidad del reloj del procesador al tiempo más rápido que sea que no requiera un divisor de flash, repita la ejecución desde el flash.

siendo un cortex-m4 encienda el caché I, repita usando flash, repita usando ram (a 168Mhz).

Si no obtuvo un rango de resultados diferentes de todos estos experimentos utilizando el mismo ciclo de prueba, probablemente esté haciendo algo mal.

Si configura cuidadosamente todos sus relojes en Reset and Clock Control (RCT) y conoce todos los relojes, puede calcular exactamente el tiempo de ejecución de la instrucción para la mayoría de las instrucciones y tener al menos una evaluación del peor caso para todas ellas. Por ejemplo, estoy usando un procesador stm32f439Zi, que es un cortex-m4 compatible con stm32f407. Si consulta el manual de referencia, el árbol del reloj le muestra el PLL y todos los preescaladores de bus. En mi caso, tengo un cuarto externo de 8 MHz con PLL configurado para proporcionar un reloj de sistema SYSCLK de 84 Mhz. Eso significa que un ciclo de procesador es 1.0 / 84e6 ~ 12 ns.

Para obtener una referencia de cuántos ciclos o SYSCLK toma una instrucción, está utilizando el Manual de referencia técnica del procesador ARM® Cortex®-M4. Por ejemplo, la instrucción MOV en la mayoría de los casos toma un ciclo. La instrucción ADD en la mayoría de los casos toma un ciclo, lo que significa que después de 12 ns tiene el resultado de la suma almacenado en el registro y listo para ser usado por otra operación.

Puede usar esa información para programar los recursos de su procesador en muchos casos, como interrupciones periódicas, por ejemplo, y los desarrolladores de software de sistemas integrados eléctricos y de bajo nivel están hablando de eso y lo están haciendo cuando se trata de estrictas aplicaciones en tiempo real y sistemas críticos de seguridad. Normalmente, los ingenieros están trabajando con el tiempo de ejecución del peor de los casos durante el diseño, ignorando la tubería para tener un interior rápido y aproximado de la carga del procesador. En la implementación, está utilizando herramientas para un análisis de tiempo preciso y refina el software.

En el proceso de diseño e implementación, las cosas no deterministas se reducen a insignificantes.

El número de ciclos de reloj por instrucción SI importa.

En un AVR, es (normalmente) 1 instrucción / reloj, por lo que un AVR de 12 Mhz funciona a unos 12 mips

En un PIC, suele ser 1 instrucción / 4 relojes, por lo que un PIC de 12 Mhz funciona a aproximadamente 3 mips

En un 8051 (orig) su 1 instrucción / 12 relojes, por lo que un 8051 de 12 Mhz se ejecuta a aproximadamente 1 mips

Para saber cuánto puede hacer, las instrucciones / reloj son relevantes. Esta es la razón por la que un procesador AMD podría hacer más / Mhz que un procesador Intel.

Si tienes algún titubeo o disposición de arreglar nuestro noticia te invitamos dejar una nota y con deseo lo interpretaremos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *