[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