Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Curso 2010-11
Esto implica que la segmentacin tendr que detenerse durante 3 ciclos de reloj, pues hasta el
final de este cuarto segmento no ser conocida la direccin de la siguiente instruccin. Este riesgo se
conoce como:
Riesgo de salto o de control
Ciclos de Reloj
Instruccin 1 2 3 4 5 6 7 8 9 10 11
Hay que resaltar que tres ciclos de reloj perdidos por cada salto es una cifra significativa.
En cualquier mquina, si se modifican valores de los registros o datos de memoria en los primeros
segmentos, hay que detener la segmentacin; tanto para saltos como para bifurcaciones.
Problema: Sea una mquina en la cual la frecuencia de instrucciones de saltos es de un 20%. Y de el total de
saltos un 60% son efectivos (saltan realmente).
Si la maquina ideal posee un IPC de 1, cuanto ms rpida es la mquina ideal frente a esta mquina con riesgos de
control (los nicos).
La relacin entre los CPI de las dos mquinas ser de 1/0.735=1.36, es decir un 36% ms lenta que la mquina
real.
Deberamos revisar la definicin de las operaciones realizadas para cada uno de los
segmentos de DLX y dejarlas como se muestra a continuacin:
3. EX: . . .
4. MEM: . . .
5. WB: . . .
El clculo de la direccin de salto se realizar para todas las instrucciones y se guardar en BTA.
La evaluacin de la condicin de salto tambin se realizara para todas las instrucciones.
La ltima accin a realizar ser la de escribir en el PC la direccin efectiva del salto. Esta accin se
debe realizar ya al final del ciclo y para entonces ya se debe de tener decodificada la instruccin para
saber que es un salto.
En caso de salto, ya no se realizar la ejecucin de los ltimos tres segmentos de la instruccin, tan
solo se pierde as un ciclo de reloj.
En algunas mquinas, poseen riesgos en los saltos de ms ciclos de reloj. Por ejemplo, los
VAX poseen normalmente penalizaciones de 4 ciclos de reloj para los saltos.
Este retardo depende de la profundidad de la segmentacin (n de segmentos por instruccin),
llevando a valer 6 y 7 ciclos de reloj para mquinas con segmentacin muy profunda.
Hemos visto como solo se pierde un ciclo, pero el procesador debe eliminar la instruccin que acaba
de ser leda del cauce segmentado, para ello utiliza una lnea de control llamada IF.Flush, la cual
pone a cero el registro IR, simulando que se ha ledo una instruccin nop. Todo esto puede
observarse en la siguiente figura:
El procesador de DLX, lo que hace es suponer que el salto nunca ser tomado y solo cuando el salto
es efectivo vaca la entrada del cauce segmentado.
Problema: Vistos los datos de la grfica anterior, si IPC IDEAL =1 , cuanto ms rpida es esta
mquina ideal respecto a mquina con DLX que posee retardos por saltos y por dependencia
de datos.
Suponer que el n de instrucciones de carga es del 13% y de ellas el 25% produce retrasos en
la segmentacin.
Suponer que el 53% de los saltos condicionales, saltan realmente.
Solucin: Calculmoslo.
N total de Instrucciones que producen retrasos:
2% (saltos) + 11%*53%(bifurcaciones) + 13%*25%(cargas) = 11,08%
El cociente entre los IPC ser:
Mtodo 3: Otro esquema posible es predecir el salto como efectivo y empezar a ejecutar como
instruccin siguiente a la del salto la que indicar el PC en caso de ser efectivo dicho salto. En DLX
esto no se puede hacer pues no se conoce la direccin del salto hasta el final del segundo ( cuarto)
segmento. Pero hay otros procesadores con juegos de instrucciones diferentes (con cdigos de
condicin), ms potentes y lentas, que si que pueden realizar este tipo de prediccin.
Mtodo 4: Este mtodo consiste en realizar lo que se conoce como salto retardado, utilizado
muchas unidades de control microprogramadas. La tcnica consiste adelantar la ejecucin de la
instruccin de salto (si se puede), para que as se sepa antes si se realiza o no el salto. Con ello se
evita los periodos muertos de retardo, pues se rellenan con instrucciones. Si el procesador determina
que el salto es efectivo, la instruccin siguiente no la anula, y sigue con la instruccin apuntada por
el nuevo valor de PC. Esto supone un cambio en la definicin de segmentacin.
Vemos algunos ejemplos del uso de esta tcnica de compilacin:
Caso 1: el hueco se llena con una instruccin anterior al salto. Es la mejor estrategia.
Caso 2: si no es posible aplicar el caso 1 por depender la condicin de salto de un registro utilizado
con anterioridad, para este tipo de bucles, podemos llenar el hueco con la instruccin
primera en caso de ser efectivo el salto, es decir, con la primera instruccin del bucle. Dicha
instruccin debe ser copiada pues puede ser utilizada por otra va.
Caso 3: para este tipo de salto se ejecuta en el tiempo de retardo la primera instruccin del bucle. A
de asegurarse el compilador que la ejecucin de esta instruccin no crea ningn problema en
el funcionamiento global del programa ejecutado.
Insistimos: Cuando los huecos no se pueden planificar se llenan con instrucciones de NOP (Not
Operation).
El principal problema esta en la planificacin de que instrucciones pueden ser ejecutadas en
los huecos de retardo y la capacidad para que el compilador prediga con que frecuencia sern
efectivos los saltos.
En la pgina siguiente se muestra la efectividad de este tipo de planificaciones de saltos en
DLX., con un nico hueco de retardo que se intenta llenar con instrucciones tiles. (F-6.22).
La barra slida indica el porcentaje de huecos que son llenados con instrucciones
diferentes a NOP.
La barra sombrada indica el porcentaje de instrucciones que realizan una tarea til. Cuando
se aplica el caso 1, siempre es til la instruccin insertada, mientras que cuando se aplica
el caso 2 y 3 no siempre lo es, y de ah esta diferencia entre las barras.
Vemos que en un 83%, 85% y 83% de los casos de sustitucin, se realiza un trabajo til.
Este valor es tan alto, recordar que solo el 53% de los saltos son efectivos, por que en la
mayora de los casos la estrategia utilizada es la del caso 1, que siempre es til la
sustitucin.
El resultado final es que aproximadamente se eliminan la mitad de los retardos por saltos.
Para finalizar vamos a analizar una grfica en la cual se hace un resumen de los retardos que
se producen para una mquina DLX de enteros, tanto por cargas como por saltos. Adems se supone
que la cache de memoria no falla y por supuesto no se producen interrupciones.
Vemos como entre el 7 y el 15 por ciento de los ciclos de reloj son prdidas por riesgos de datos o
de saltos.
El CPI efectivo para estas pruebas es de aproximadamente de 1.1.
La mejora aportada por la segmentacin es de un factor 5.3.
;===================================================
; SERIE.S :
;===================================================
.data 0x1000
n_dat: .word 16, 0
cte1: .double 6.7
cte2: .double 3.3
Ser_X: .double 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8
.double 1.9, 2.0, 2.1, 2.2, 2.3, 2.4, 2.5
Ser_Y: .double 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8
.double 1.9, 2.0, 2.1, 2.2, 2.3, 2.4, 2.5
Ser_Z: .double 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8
.double 1.9, 2.0, 2.1, 2.2, 2.3, 2.4, 2.5
.text 0x100
lw R16, n_dat
ld F6, cte1
ld F2, cte2
addi R1, R0, 0
SD Ser_W(R1), F26
TRAP 0
Caso 1:
;==================================== ;====================================
; SALTO.S : INTRUCCIN IF-ELSE = ; SALTO_R.S : INTRUCCIN IF-ELSE =
;==================================== ;====================================
.data .data
dato: .float 1.5, 2.0 dato: .float 1.5, 2.0
Nop
ADDF F20 , F4 , F6
ADDF F20 , F4 , F6
SF dato+8 , F20
eti2: trap 0 SF dato+8 , F20
eti2: trap 0
;==================================== ;====================================
; SALTO.S : INTRUCCIN IF-ELSE = ; SALTO_R.S : INTRUCCIN IF-ELSE =
;==================================== ;====================================
.data .data
dato: .double 1.5, 2.0, 3.3, 4.4 dato: .double 1.5, 2.0, 3.3, 4.4
LD F4 , dato(R8)
SD dato , F8 SD dato , F8
trap 0 trap 0
;==================================== ;====================================
; SALTO.S : INTRUCCIN IF-ELSE = ; SALTO_R.S : INTRUCCIN IF-ELSE =
;==================================== ;====================================
.data .data
NOP
LD F4 , dato(R0) LD F4 , dato(R0)
LD F6 , dato+8(R0) LD F6 , dato+8(R0)
;==================================== ;====================================
; SALTO.S : INTRUCCIN IF-ELSE = ; SALTO_R.S : INTRUCCIN IF-ELSE =
;==================================== ;====================================
.data .data
LD F6 , dato+8(R0)
LD F4 , dato(R0)
LD F6 , dato+8(R0) LD F4 , dato(R0)