[HACK] Microprocessors, pipelines and clock speeds
"Fermín J. Serna"
fjserna at ngsec.com
Thu May 19 17:31:52 CEST 2005
Hola David,
> En este caso la velocidad maxima a la que podria operar el micro son
> 200 MHz (1/5ns). Seria eso correcto?
Ok.
>
> Supongamos que las otras 4 etapas tardan 2ns, y ahora hemos conseguido
> segmentar la ALU en otras 3 etapas. Tenemos 7 etapas, 6 de las cuales
> son de 2ns y otra de 1ns. Tendriamos que la velocidad maxima serian
> 500 MHz (1/2ns). Lo cual no implica que las instrucciones se ejecuten
> mas rapido porque a pesar de que el reloj va mas rapido, tenemos mas
> etapas (no estoy teniendo en cuenta los registros entre etapas para
> simplificar).
>
Las instrucciones en si no se ejecutan más rápido, a no ser que la
subsegmentación sea en tiempos mejor que lo que habia anteriormente, en
este caso "ideal" no (2+2+1=5) Pero si hay un speed-up en el tiempo de
ejecución de un conjunto de instrucciones, con todo lo que ese dato
conlleva.
Pongamos un ejemplo de 10 instrucciones:
---
PERDÓN POR EL OFFTOPIC Y EL PEÑAZO QUE VIENE A CONTINUACIÓN
---
En el MIPS de 5 etapas, 5 ns/ciclo:
ciclo1: instrucción 1 --> etapa1
ciclo2: instrucción 1 --> etapa2
instrucción 2 --> etapa1
ciclo3: instrucción 1 --> etapa3
instrucción 2 --> etapa2
instrucción 3 --> etapa1
ciclo4: instrucción 1 --> etapa4
instrucción 2 --> etapa3
instrucción 3 --> etapa2
instrucción 4 --> etapa1
ciclo5: instrucción 1 --> etapa5 (fin instrucción 1)
instrucción 2 --> etapa4
instrucción 3 --> etapa3
instrucción 4 --> etapa2
instrucción 5 --> etapa1
ciclo6: instrucción 2 --> etapa5 (fin instrucción 2)
instrucción 3 --> etapa4
instrucción 4 --> etapa3
instrucción 5 --> etapa2
instrucción 6 --> etapa1
ciclo7: instrucción 3 --> etapa5 (fin instrucción 3)
instrucción 4 --> etapa4
instrucción 5 --> etapa3
instrucción 6 --> etapa2
instrucción 7 --> etapa1
ciclo8: instrucción 4 --> etapa5 (fin instrucción 4)
instrucción 5 --> etapa4
instrucción 6 --> etapa3
instrucción 7 --> etapa2
instrucción 8 --> etapa1
ciclo9: instrucción 5 --> etapa5 (fin instrucción 5)
instrucción 6 --> etapa4
instrucción 7 --> etapa3
instrucción 8 --> etapa2
instrucción 9 --> etapa1
cicl10: instrucción 6 --> etapa5 (fin instrucción 6)
instrucción 7 --> etapa4
instrucción 8 --> etapa3
instrucción 9 --> etapa2
instrucción10 --> etapa1
cicl11: instrucción 7 --> etapa5 (fin instrucción 7)
instrucción 8 --> etapa4
instrucción 9 --> etapa3
instrucción10 --> etapa2
cicl12: instrucción 8 --> etapa5 (fin instrucción 8)
instrucción 9 --> etapa4
instrucción10 --> etapa3
cicl13: instrucción 9 --> etapa5 (fin instrucción 9)
instrucción10 --> etapa4
cicl14: instrucción10 --> etapa5 (fin instrucción 10)
Total 14 ciclos. Tiempo de ejecucion: 14 ciclos * 5 ns/ciclo = 70 ns de
ejecución
==================
MIPS (con ALU segmentada) 7 etapas y 2ns/ciclo.
ciclo1: instrucción 1 --> etapa1
ciclo2: instrucción 1 --> etapa2
instrucción 2 --> etapa1
ciclo3: instrucción 1 --> etapa3
instrucción 2 --> etapa2
instrucción 3 --> etapa1
ciclo4: instrucción 1 --> etapa4
instrucción 2 --> etapa3
instrucción 3 --> etapa2
instrucción 4 --> etapa1
ciclo5: instrucción 1 --> etapa5
instrucción 2 --> etapa4
instrucción 3 --> etapa3
instrucción 4 --> etapa2
instrucción 5 --> etapa1
ciclo6: instrucción 1 --> etapa6
instrucción 2 --> etapa5
instrucción 3 --> etapa4
instrucción 4 --> etapa3
instrucción 5 --> etapa2
instrucción 6 --> etapa1
ciclo7: instrucción 1 --> etapa7 (fin instrucción 1)
instrucción 2 --> etapa6
instrucción 3 --> etapa5
instrucción 4 --> etapa4
instrucción 5 --> etapa3
instrucción 6 --> etapa2
instrucción 7 --> etapa1
ciclo8: instrucción 2 --> etapa7 (fin instrucción 2)
instrucción 3 --> etapa6
instrucción 4 --> etapa5
instrucción 5 --> etapa4
instrucción 6 --> etapa3
instrucción 7 --> etapa2
instrucción 8 --> etapa1
ciclo9: instrucción 3 --> etapa7 (fin instrucción 3)
instrucción 4 --> etapa6
instrucción 5 --> etapa5
instrucción 6 --> etapa4
instrucción 7 --> etapa3
instrucción 8 --> etapa2
instrucción 9 --> etapa1
cicl10: instrucción 4 --> etapa7 (fin instrucción 4)
instrucción 5 --> etapa6
instrucción 6 --> etapa5
instrucción 7 --> etapa4
instrucción 8 --> etapa3
instrucción 9 --> etapa2
instrucción10 --> etapa1
cicl11: instrucción 5 --> etapa7 (fin instrucción 5)
instrucción 6 --> etapa6
instrucción 7 --> etapa5
instrucción 8 --> etapa4
instrucción 9 --> etapa3
instrucción10 --> etapa2
cicl12: instrucción 6 --> etapa7 (fin instrucción 6)
instrucción 7 --> etapa6
instrucción 8 --> etapa5
instrucción 9 --> etapa4
instrucción10 --> etapa3
cicl13: instrucción 7 --> etapa7 (fin instrucción 7)
instrucción 8 --> etapa6
instrucción 9 --> etapa5
instrucción10 --> etapa4
cicl14: instrucción 8 --> etapa7 (fin instrucción 8)
instrucción 9 --> etapa6
instrucción10 --> etapa5
cicl15: instrucción 9 --> etapa7 (fin instrucción 9)
instrucción10 --> etapa6
cicl16: instrucción10 --> etapa7 (fin instrucción 10)
Total 16 ciclos. Tiempo de ejecucion: 16 ciclos * 2 ns/ciclo = 32 ns de
ejecución
Yo creo que la estrategia adecuada es reducir a lo mínimo posible el
tiempo de la etapa critica, bien sea por subsegmentación o mejora de
lógica/componentes de la etapa critica.
Peor me puedo equivocar! XD
>>Ademas, con esta nueva segmentación, puedes meter 2 instrucciones más en
>>el pipeline para su ejecución en "paralelo".
>
>
> Lo cual puede producir una perdida de rendimiento si el branch
> prediction unit se equivoca no?
Claro pero para eso estan algoritmos de predicción de saltos con memoria
global o local, para que funcionen BIEN!. Son muy curiosos esos
métodos ya que tienen como una fase de aprendizaje como las redes de
neuronas pero mucho mas simples ya que se basan en contadores saturados
y su incremento/decremento en base a que acierten o no la predicción :)
Eso sí, si fallan... como bien supones habrá más instrucciones inútiles
para anular en el pipeline. Pero yo dije y hablaba del caso ideal sin
contar muchos factores. :P
>
>>No se como está ahora los micros de intel IA32 pero creo recordar que
>>habia del orden de 70 y pico etapas.
>
>
> Los primeros Pentium 4 tienen 20 etapas, los ultimos 31.
>
Ahh genial por buscarlo, gracias :)
Saludos
--
Femín J. Serna @ NGSEC
http://www.ngsec.com
C\O´Donnell nº 46, 3ºB
28009 Madrid
Spain
Telf.: +34 91 435 56 27
Fax.: +34 91 577 84 45
More information about the hacking
mailing list