En arquitectura informática , los ciclos por instrucción (también conocidos como ciclos de reloj por instrucción , relojes por instrucción o CPI ) son un aspecto del rendimiento de un procesador : la cantidad promedio de ciclos de reloj por instrucción para un programa o fragmento de programa. [1] Es el inverso multiplicativo de instrucciones por ciclo .
El promedio de ciclos por instrucción en un proceso dado ( CPI ) se define mediante el siguiente promedio ponderado :
Donde es la cantidad de instrucciones para un tipo de instrucción determinado , son los ciclos de reloj para ese tipo de instrucción y es el recuento total de instrucciones. La suma suma todos los tipos de instrucciones para un proceso de evaluación comparativa determinado.
Supongamos una tubería RISC clásica , con las siguientes cinco etapas:
Cada etapa requiere un ciclo de reloj y una instrucción pasa a través de las etapas secuencialmente. Sin pipeline , en un procesador multiciclo , una nueva instrucción se obtiene en la etapa 1 solo después de que la instrucción anterior finaliza en la etapa 5, por lo tanto, el número de ciclos de reloj que se necesitan para ejecutar una instrucción es cinco (CPI = 5 > 1). En este caso, se dice que el procesador es subescalar . Con pipeline, se obtiene una nueva instrucción en cada ciclo de reloj explotando el paralelismo a nivel de instrucción , por lo tanto, dado que teóricamente uno podría tener cinco instrucciones en las cinco etapas de pipeline a la vez (una instrucción por etapa), una instrucción diferente completaría la etapa 5 en cada ciclo de reloj y, en promedio, el número de ciclos de reloj que se necesitan para ejecutar una instrucción es 1 (CPI = 1). En este caso, se dice que el procesador es escalar .
Con un procesador con una sola unidad de ejecución , el mejor CPI alcanzable es 1. Sin embargo, con un procesador con varias unidades de ejecución, se pueden lograr valores de CPI incluso mejores (CPI < 1). En este caso, se dice que el procesador es superescalar . Para obtener mejores valores de CPI sin segmentación, la cantidad de unidades de ejecución debe ser mayor que la cantidad de etapas. Por ejemplo, con seis unidades de ejecución, se obtienen seis nuevas instrucciones en la etapa 1 solo después de que las seis instrucciones anteriores finalicen en la etapa 5, por lo tanto, en promedio, la cantidad de ciclos de reloj que se necesitan para ejecutar una instrucción es 5/6 (CPI = 5/6 < 1). Para obtener mejores valores de CPI con segmentación, debe haber al menos dos unidades de ejecución. Por ejemplo, con dos unidades de ejecución, se obtienen dos nuevas instrucciones en cada ciclo de reloj aprovechando el paralelismo a nivel de instrucción, por lo tanto, dos instrucciones diferentes completarían la etapa 5 en cada ciclo de reloj y, en promedio, el número de ciclos de reloj que se necesitan para ejecutar una instrucción es 1/2 (CPI = 1/2 < 1).
Para los MIPS multiciclo , hay cinco tipos de instrucciones:
Si un programa tiene:
entonces el IPC es:
[2] Se utilizó un procesador de 400 MHz para ejecutar un programa de referencia con la siguiente combinación de instrucciones y recuento de ciclos de reloj :
Determine el CPI efectivo, la tasa de MIPS (millones de instrucciones por segundo) y el tiempo de ejecución para este programa.
desde: y
Por lo tanto: