Documentos de Académico
Documentos de Profesional
Documentos de Cultura
rendimiento
IE0521: 1 Estructuras de computadoras II
Universidad de Costa Rica
Ing. Gerardo Castro
II semestre 2021
Microprocesador
• Unidades básicas de un
microprocesador Intel :
• Unidad de fetch de instrucciones
• Decodificador de instrucciones.
• Despachador de instrucciones.
• Unidad ejecución.
• Registros.
• Unidad de interface (Front Side
Bus).
Arquitecturas
Memoria
Instrucción
Memoria
CPU Instrucción/
Datos
CPU
Memoria
Datos
Microprocesador
• Ejemplo:
• Suponga que:
• Un programa ejecuta 4 millones de instrucciones
• El procesador tarda 3 ciclos de reloj en completar cada instrucción.
• La frecuencia de reloj del procesador es 100MHz.
• Cual es tiempo de ejecución?
Microprocesador
• Solución:
• Opción1:
• . incorrecto.
( . )
• Opción2:
• Porcentaje de tiempo: 0.2x4/
= 0.8/2.1=0.38
• .
( . )
• Opción3:
( . . . . )
• cpu_new/cpu_actual=
( . . . . )
.
Ley de Amdahl’s
• Porcentaje de tiempo:
• Ind 40% CPI 1.
• BR 20% CPI 3.
• LD 30% CPI 2.
• ST 10% CPI 3.
• BR CPI 3->2.
• ST CPI 3->2.
• Cual es mejor?
• Speedup BR:1/(1-0.2+0.2/1.5)=1.075
• Speedup ST: = 1/(1-0.1+0.1/1.5)=1.041
Arquitectura Segmentada (Pipeline)
• Concepto : Línea de ensamblado o de
producción.
• Es una técnica donde múltiple instrucciones
se ejecutan concurrentemente.
• La segmentación (Pipeline) no acelera la
ejecución de una sola instrucción. Acelera
la ejecución de un grupo de instrucciones.
• Un pipeline básico divide la etapas básicas
del CPU y en cada una de ellas se ejecuta
en un ciclo de reloj.
• La etapa mas lenta define la frecuencia de
reloj.
• Para balancear el pipeline, todas las etapas
requiere que duren un tiempo similar.
• El numero de etapas se llama: profundidad
de pipeline.
• Presenta: peligro (hazard) de datos, control
y estructurales.
Pipeline: Structural Hazard
WAR
WAW
Pipeline: Data Hazard
WAR
(bubble)
Pipeline: Data Hazard
WAW or RAW
(Forwarding)
Pipeline: Control Hazard
• Esquema Estática:
• Predecir si salto ocurre o no para todas las ejecuciones.
• Lo mas común era asumir que salto se iba a tomar.
• Esta técnica ya no se utiliza.
• Esquema Dinámico:
• Esquemas simples revisando lo que ocurrió en el ultimo salto (se tomo o no).
Revisar el pasado.
• 1 bit :
• taken
• not taken.
• 2 bit (histéresis):
Predicción de saltos
• Tasa de predicción:
Predicción de saltos con historia privada
(pshare)
• Patrón de salto:
• TNTNT
• TTNTTN
• BHT (Branch History Table):
• Se actualiza el “History bit” si el salto se toma 1 y si no 0.
• Se actualiza el 2 Bit counter que utilizó en la ultima predicción.
addrB 0 SN WT
Predicción de saltos con historia
• Ejemplo:
• N, T, N, T, N
• Solución:
1 0 WN SN N T No
2 1 WT SN N N Si
4 0 WT SN T T Si
5 1 ST SN N N Si
6 0 ST SN
Predicción de saltos con historia global
(Gshare)
• Ejemplo:
• If (variable == A) { //Branch1-PC1
Do something
…
}
• If (variable != A){ //Branch2-PC2
Do something
…
}
• Del código anterior se puede observar que el branch2 se toma si el branch1
no se toma.
• Existe una relación de salto entre PC distintos (PC1-PC2).
• Los predictores de historia global toman en cuenta la información de otros
saltos (predictores de correlación).
• Su implementación consiste en registro de corrimiento que indexa un
contador 2 bits. También se puede combinar con el PC actual.
Predictor de saltos tipo torneo (meta
predictor, predictor de 2 niveles)
Predicción de saltos
• BTB:
• Si se predice que el salto se va tomar, es necesario predecir la dirección
donde va saltar el programa.
• Se quiere una estructura similar a un cache: buffer de predicción de saltos,
que almacena las direcciones de los saltos y dirección objetivo donde se
debe saltar.
Predicción de saltos
• BTB:
Pre-fetching
• Características:
• Microprocesador de 32 bit.
• Introduce Modo protegido.
Permite un espacio de memoria
de 4G.
• Unidad de prefetcher & Queue:
trabaja con la suposición de que
el programa que se esta
ejecutando nunca salta. La
instrucciones que les hace pre-
fetch se almacenan en una cola
de 16 bytes.
• Unidad de manejo de memoria:
Segmentos, Paginación y TLB
(Protected mode).
Desempeño CPU/Memoria
• CPU: 60% por año 2X cada 1.5 años.
• DRAM: 5.5-7% por año. Menos de 2X en 10 años.
• Solución:
• Poner una pequeña pero rápida memoria entre el CPU y la DRAM, conocida como
cache.
• Crear una jerarquía de memoria.
Jerarquía de Memoria
• Dibuje la ejecución las instrucciones en una tabla y resuelva las dependencias de datos insertando
burbujas en el pipeline para garantizar la correcta ejecución.
Ejercicio #2 Superscalar y Pipeline
• Dadas las siguientes instrucciones:
• 1. label1 lw x1, 0x200(x2)
• 2. xor x3, x1
• 3. BEQ x3, x4 label1
• 4. add x5,x1
• 5. lw x3, 0x400(x1)
• Suponga una maquina con:
• No pipeline.
• 5-Stage-Pipeline (IF,ID,EX,MEM,WB) sin Forwarding.
• 2-way superscalar.
• 2-way superscalar pipeline (IF,ID,EX,MEM,WB) sin Forwarding.
• 5-Stage-Pipeline (IF,ID,EX,MEM,WB) sin Forwarding con predicción de salto estática (no se toma el salto).
• Funciones de las etapas del pipeline:
• IF => fetch de Instrucciones.
• ID => Decodificación de instrucción y lectura de registros.
• EX => Ejecución de operación o calculo de dirección.
• MEM => acceso de operando en memoria.
• WB => escritura de resultado en registro.
• Dibuje la ejecución las instrucciones en una tabla y resuelva las dependencias de datos insertando
burbujas en el pipeline para garantizar la correcta ejecución.
Paralelismo a nivel de instrucción (ILP)
• Ejemplo RISC-V.
Calendarización dinámica
• Explota el paralelismo de código que la arquitectura super-scalar no
puede ver.
• Calendarización dinámica permite la ejecución fuera de orden (out of
order execution)
• Calendarización dinámica Hardware especulativo.
Ejecución fuera de orden y hardware
especulativo
• Considere la secuencia que se muestra. Es
posible conocer si el salto se va a ejecutar o
no?
• Ejecutemos el código (foo) sin saber si el
salto se va tomar o no, si se toma puede
ganar mucho en el tiempo de ejecución.
• En la ejecución fuera de orden se crea un
estado especulativo.
• El código se ejecuta en un forma
especulativa pero los resultados deben
reflejarse al estado real solo si el estado
especulativo es correcto.
• El programa entra en orden (1), se ejecuta
en desorden (2) y se retiran en orden (3).
• Ejecución fuera de orden requiere
calendarización dinámica y predicción de
saltos.
• Que sucede si el estado especulativo es
incorrecto: causa perdida de tiempo,
perdida de potencia y el desempeño
decrece.
Ejecución fuera de orden
… … 2-pipe schedule
MOV EAX, ECX MOV p2, p1 Clock0
ADD EAX, 16 ADD p2, 16 MOV p2, p1
MOV mem3, EAX MOV mem3, p2 MOV p3, 5
MOV p3, 5 Clock1
MOV EAX, 5
ADD p3, p0 ADD p2, 16
ADD EAX, EBX
IMUL p3, 7 ADD p3, p0
IMUL EAX, 7
... Clock2
...
registers renamed MOV mem3, p2
• without renaming - requires more IMUL p3, 7
than 6 clock cycles to schedule
• false dependencies can be caused
by the need to reuse registers for
unconnected reasons
Dependencias
• Antidependencia:
• Ocurre cuando una instrucción lee y otra escribe de un mismo lugar.
• Por ejemplo:
• Se utiliza una tabla conocida como RAT (Register Alias Table) donde se
realiza un mapeo entre registros físicos y registros de arquitectura.
• Algoritmo:
• Los registros lógicos se renombran a registros físicos cuando la instrucción
termina la ultima etapa del front-end (fetch & decode).
• Los operandos se reemplazan por registros físicos a los cuales mapean y el
registro destino se le asigna un nuevo registro físico.
• Ejemplo: • RAT
• ADD R1 R3 R3 • R1
• SUB R4 R1 R5
• R2
• XOR R6 R7 R8
• MUL R5 R8 R4 • R3
• ADD R4 R8 R9 • R4
• SUB R7 R4 R1 • R5
• R6
• R7
• R8
• R9
Renombre de registros
• Ejemplo: • RAT
• ADD R1 R3 R3 • R0
• SUB R4 R1 R5
• R1 P17
• XOR R6 R7 R8
• MUL R5 R8 R4 • R2
• ADD R4 R8 R9 • R3
• SUB R7 R4 R1 • R4 P18 P21
• R5 P20
• Solución: • R6 P19
• ADD P17 R3 R3 //R3 no tiene mapeo • R7 P22
• SUB P18 P17 R5 //R5 no tiene mapeo • R8
• XOR P19 R7 R8 // R7 y R8 no tienen mapeo • R9
• MUL P20 R8 P18 // R8 no tiene mapeo
• //R4 == P21
• ADD P21 R8 R9 // R8 y R9 no tienen mapeo
• SUB P22 P21 P17
Reorder buffer
• Técnicas de rendimiento:
• Super-pipelined.
• Super-Scalar.
• Ejecución fuera de orden (ejecución
especulativa.
• Renombre de registros.
• Predicción de saltos.
• Retiro de instrucciones en orden.
Simultaneous Multi-Threading (SMT)
• En un sistema operativo multi-tarea, un trabajo se
puede dividir en múltiples tareas (conocidas como
threads).
• Existen dos formas que el OS puede hacer que el
procesador cambie de tarea: tiempo compartido o
por eventos.
• En SMT, el procesador alterna el fetch de
instrucciones que están asociadas a dos programas
separados (threads).
• SMT permite que le procesador haga fetch y ejecute
2 threads simultáneamente.
• Implica que tiene 2 conjuntos de registros pero solo
un conjunto de unidades de ejecución.
• Un procesador SMT (físico) tiene 2 o más máquinas
lógicas (logical processor) capaces de alimentar las
unidades de ejecución.
• SMT no implementa 2 microprocesadores en vez
comparte recursos.
• Es necesario el soporte del OS: Windows XP en
adelante, Linux versión 2.4x en adelante.
Arquitectura Pentium 4 (2001)
Desktop/Laptop ++ ++ ++ ++
s
Servidores +++ +++ +++ +++
Back-up: Familia 80x86