Descargar la presentación
La descarga está en progreso. Por favor, espere
Publicada porLarissa de Almada de Santarém Modificado hace 6 años
1
Commit out of order Ciclo 1: Detecto un load que fallo en L2 en el tope del ROB Load R3(F5)=R4(F4)+R2(F2) R2(F6)=R1(F1)+R3(F5) Branch R3(F5) R4(F7)=R3(F5) Branch R4(F7) R1(F8)=R4(F7) R4(F9)=R1(F8)+R3(F5) Map Commit F1 F2 F3 F4 Map F8 F6 F5 F9 Busy 1 Busy+Lock PC Seq Store Map Commit Lock Lock Register
2
Commit out of order Ciclo 1: Saco el load y lo inserto en la tabla
R3(F5)=R4(F4)+R2(F2) R2(F6)=R1(F1)+R3(F5) Branch R3(F5) R4(F7)=R3(F5) Branch R4(F7) R1(F8)=R4(F7) R4(F9)=R1(F8)+R3(F5) R3(F10)=R1(F8)+R3(F5) Map Commit F1 F2 F5 F4 Map F8 F6 F10 F9 Busy 1 Busy+Lock PC Seq Store Map Commit Lock 1 F1 F2 F3 F4 Lock Register
3
Commit out of order Ciclo 2: La primera instrucción en el ROB esta terminada R3(F5)=R4(F4)+R2(F2) R2(F6)=R1(F1)+R3(F5) Branch R3(F5) R4(F7)=R3(F5) Branch R4(F7) R1(F8)=R4(F7) R4(F9)=R1(F8)+R3(F5) R3(F10)=R1(F8)+R3(F5) Map Commit F1 F2 F5 F4 Map F8 F6 F10 F9 Busy 1 Busy+Lock PC Seq Store Map Commit Lock 1 F1 F2 F3 F4 Lock Register
4
Commit out of order Ciclo 2: La instrucción que queda como primera no esta terminada, asi que la conservo. R2(F6)=R1(F1)+R3(F5) Branch R3(F5) R4(F7)=R3(F5) Branch R4(F7) R1(F8)=R4(F7) R4(F9)=R1(F8)+R3(F5) R3(F10)=R1(F8)+R3(F5) Load Map Commit F1 F2 F5 F4 Map F11 F6 F10 F9 Busy 1 Busy+Lock PC Seq Store Map Commit Lock 1 F1 F2 F3 F4 Lock Register
5
Commit out of order Ciclo 3: Como la primera instrucción del ROB no esta lista, la tengo que mover a la tabla R2(F6)=R1(F1)+R3(F5) Branch R3(F5) R4(F7)=R3(F5) Branch R4(F7) R1(F8)=R4(F7) R4(F9)=R1(F8)+R3(F5) R3(F10)=R1(F8)+R3(F5) Load Map Commit F1 F6 F5 F4 Map F8 F10 F9 Busy 1 Busy+Lock PC Seq Store Map Commit Lock 1 F1 F2 F3 F4 Lock Register
6
Commit out of order Ciclo 3: Tabla modificada Branch R3(F5)
R4(F7)=R3(F5) Branch R4(F7) R1(F8)=R4(F7) R4(F9)=R1(F8)+R3(F5) R3(F10)=R1(F8)+R3(F5) Load Branch R1(F11) Map Commit F1 F6 F5 F4 Map F11 F10 F9 Busy 1 Busy+Lock PC Seq Store Map Commit Lock 1 F1 F2 F3 F4 3 F6 F5 Lock Register
7
Commit out of order Ciclo 4: Commit de 4 Branch R3(F5) R4(F7)=R3(F5)
Load Branch R1(F11) Map Commit F1 F6 F5 F4 Map F11 F10 F9 Busy 1 Busy+Lock PC Seq Store Map Commit Lock 1 F1 F2 F3 F4 3 F6 F5 Lock Register
8
Commit out of order Ciclo 5: Commit de 5 R4(F7)=R3(F5) Branch R4(F7)
R4(F9)=R1(F8)+R3(F5) R3(F10)=R1(F8)+R3(F5) Load Branch R1(F11) NOP Map Commit F1 F6 F5 F4 Map F11 F10 F9 Busy 1 Busy+Lock PC Seq Store Map Commit Lock 1 F1 F2 F3 F4 3 F6 F5 Lock Register
9
Commit out of order Ciclo 5: Despues del commit de 5 Branch R4(F7)
R1(F8)=R4(F7) R4(F9)=R1(F8)+R3(F5) R3(F10)=R1(F8)+R3(F5) Load Branch R1(F11) NOP Map Commit F1 F6 F5 F7 Map F11 F10 F9 Busy 1 Busy+Lock PC Seq Store Map Commit Lock 1 F1 F2 F3 F4 3 F6 F5 Lock Register
10
Commit out of order Ciclo 6: Despues del commit de 6 R1(F8)=R4(F7)
R4(F9)=R1(F8)+R3(F5) R3(F10)=R1(F8)+R3(F5) Load Branch R1(F11) NOP Map Commit F1 F6 F5 F7 Map F11 F10 F9 Busy 1 Busy+Lock PC Seq Store Map Commit Lock 1 F1 F2 F3 F4 3 F6 F5 Lock Register
11
Commit out of order Ciclo 7: Despues del commit de 7
R4(F9)=R1(F8)+R3(F5) R3(F10)=R1(F8)+R3(F5) Load Branch R1(F11) NOP Map Commit F8 F6 F5 F7 Map F11 F10 F9 Busy 1 Busy+Lock PC Seq Store Map Commit Lock 1 F1 F2 F3 F4 3 F6 F5 Lock Register
12
Commit out of order Ciclo 8: Commit de 8 R4(F9)=R1(F8)+R3(F5)
Load Branch R1(F11) NOP Map Commit F8 F6 F5 F7 Map F11 F10 F9 Busy 1 Busy+Lock PC Seq Store Map Commit Lock 1 F1 F2 F3 F4 3 F6 F5 Lock Register
13
Commit out of order Ciclo 8: Commit de 8. Notar que F7 queda libre.
R3(F10)=R1(F8)+R3(F5) Load Branch R1(F11) NOP Map Commit F8 F6 F5 F9 Map F11 F10 Busy 1 Busy+Lock PC Seq Store Map Commit Lock 1 F1 F2 F3 F4 3 F6 F5 Lock Register
14
Commit out of order Ciclo 9: Supongamos que 1 se termina de ejecutar, en este ciclo R3(F10)=R1(F8)+R3(F5) Load Branch R1(F11) NOP Map Commit F8 F6 F5 F9 Map F11 F10 Busy 1 Busy+Lock PC Seq Store Map Commit Lock 1 F1 F2 F3 F4 3 F6 F5 Lock Register
15
Commit out of order Ciclo 9: Porque 1 se termino de ejecutar nos queda: R3(F10)=R1(F8)+R3(F5) Load Branch R1(F11) NOP Map Commit F8 F6 F5 F9 Map F11 F10 Busy 1 Busy+Lock PC Seq Store Map Commit Lock 3 F1 F6 F5 F4 1 Lock Register
16
Commit out of order Ciclo 9: Despues del commit de 9
Load Branch R1(F11) NOP Map Commit F8 F6 F10 F9 Map F11 Busy 1 Busy+Lock PC Seq Store Map Commit Lock 3 F1 F6 F5 F4 1 Lock Register
17
Commit out of order Ciclo 10: Despues de commit 10. Se libera F8
Branch R1(F11) NOP Map Commit F11 F6 F10 F9 Map Busy 1 Busy+Lock PC Seq Store Map Commit Lock 3 F1 F6 F5 F4 1 Lock Register
18
Commit out of order Ciclo 11: Termina 3 Branch R1(F11) NOP Map Commit
Busy 1 Busy+Lock PC Seq Store Map Commit Lock Lock Register
19
Commit out of order Si puedo sacar las instrucciones del reorder buffer fuera de orden, es necesario el reorder buffer?
20
Con el esquema anterior NO,
Commit out of order Con el esquema anterior NO, PERO ...
21
Variable lenght ROB with out of order commit
Commit out of order Con unos pequeños cambios SI: Variable lenght ROB with out of order commit
22
Variable lenght ROB with out of order commit
Agregemosle a cada entrada en la tabla de checkpoints un contador de instrucciones faltantes de commit para ese checkpoint A cada entrada en las colas de issue se le agrega una entrada que solo tiene un numero correspondiente a su checkpoint
23
Variable lenght ROB with out of order commit
Idea y Funcionamiento: Cada instrucción siempre tiene un chequepoint. Cada checkpoint cuenta cuantas instrucciones que no hicieron commit estan bajo su “proteccion” Cuando el checkpoint no “protege” a ninguna instrucción se libera esa entrada en la tabla Cuando se hace un dispach de una instrucción se incrementa el contador del checkpoint que la “protege” Cuando una instrucción finaliza su ejecucion decrementa el contador del checkpoint que la “protege”
24
Variable lenght ROB with out of order commit
Donde y cuando insertar un checkpoint? El donde, en realidad no importa, si bien hay lugares que son mas convenientes que otros (los branch con baja confidencia). El cuando, no conviene que los bloques protegidos sean muy chicos (ya que no se liberarian registros dentro del bloque), ni muy grandes (se desperdiciaria mucho en caso de que el bloque no se ejecute en la totalidad). Hay que buscar una funcion de optimizacion que tenga como parametros la cantidad de instrucciones protegidas y la confidencia de los branchs)
25
Variable lenght ROB with out of order commit
Limites: Los problemas que encuentro son: La longitud del store buffer, y la longitud de la cola de load/store, principalmente. La cantidad de entradas en la tabla de checkpoints, aunque calculo que con muy pocas entradas 8 o 16 bastarian, igual cada entrada tiene menos de 100 bytes para una arquitectura con 64 registros logicos y 256 fisicos. El costo de los saltos mal predichos es mayor
26
Variable lenght ROB with out of order commit
Ventajas: Puede llegar a “simular” ROBs de miles de instrucciones, con lo cual se puede llegar a absorber mucho mejor las instrucciones de latencia prolongada. Puede llegar a reducir mucho la presion sobre los bancos de registros, amen de que se puede adaptar perfectamente a los registros virtuales ambos son ortogonales
27
Combinando ambas ideas
Se pueden combinar ambas ideas y obtener lo mejor de las dos formas de trabajo, haciendo inclusive un sistema mixto que cambie de forma de trabajar de acuerdo al codigo que se este ejecutando. La ventaja de mezclar ambos metodos de trabajo seria que cuando una instrucción dependiente de otra que ya se esta en la tabla de checkpoints, no haria falta enviarla tambien a la tabla, por lo tanto no me ocuparia espacio en la tabla, la podria dejar solo en las colas de issue, con lo cual con muy pocas entradas en la tabla seria suficiente. De igul forma la ROB podria ser mas pequeña dado que existe un mecanismo que me permitiria ir mas lejos.
Presentaciones similares
© 2025 SlidePlayer.es Inc.
All rights reserved.